2011-05-03 76 views
0

我对silverlight很新颖,所以我有关于用户控件之间的通信的这个问题。我有用户控件,其中有按钮,应该设置其他用户控件的某些属性。例如,将IsEnabled属性设置为true或false或可见性等等。其实,我知道一个解决方案,它会是这样的:Silverlight中的用户控件之间的通信

类的UserControl1:用户控件
{
公共UserControl2 UC2;

私人无效的button1_Click(对象发件人,RoutedEventArgs E)
{
uc2.IsEnabled = FALSE; //或uc2.SomeMethod();
}
}

相似无二UserControl2类,然后在主网页,我只补充:
UserControl1.uc2 = UserControl2;

我的问题是,我怎么能通过事件处理程序来做到这一点?或者也许有更好的解决方案?一个简单的例子会受到欢迎。谢谢。

+0

你能更好的解释一下这个场景吗? – AbdouMoumen 2011-05-03 16:35:34

+0

@AbduoMoumen 当然。我有一个用户控件,它有几个按钮(例如新建,编辑,删除...),这些按钮应该与其他用户控件进行交互(例如,如果我单击新建,带有文本框的用户控件出现,其他用户表示搜索栏禁用的控件,等等......)。所以基本上我需要用户控件之间的某种交互。如果我在一个用户控件中单击一个按钮,我想要显示一个用户控件或删除另一个用户控件,或者更改其他用户控件的属性。 – 2011-05-03 23:56:30

回答

0

另一种方法是使用事件聚合器进行此类通信。我们在我们的项目中使用了Prism的事件聚合器。请检查以下thread
事情要记住,而使用活动聚合器是

  • 保留其使用到最低限度。这是因为使用事件聚合器的事件订阅可能难以调试。因此,在同一班级内使用正常事件。
  • 以描述事件的方式使用事件聚合器时命名事件。例如,如果您单击保存按钮来保存客户,请使用事件名称,如BeforeCustomerSave \ CustomerSaved而不是SaveButtonClicked。