我有一个C#Silverlight应用程序。此应用程序具有带2x2网格的UserControl。 Grid的每个单元格都有自己的UserControl。这些子UserControl元素中的每一个都有一个Button。当用户单击子项中的Button时,我想执行父UserControl中的方法。然后,此方法将信息发送到其他三个子UserControls。我该怎么做?
谢谢!
答案 0 :(得分:0)
如果您正在使用绑定,则可以将模型绑定到主控件的DataContext,例如以下模型:
class MasterViewModel{
///Action for child user control 1
void DoUserControlAction1(){ //... }
///Action for child user control 2
void DoUserControlAction2(){ //... }
//...
///Action for child user control n
void DoUserControlActionN(){ //... }
}
然后在每个子控件中,因为它的DataContext是从父Master UserControl的绑定DataContext继承的:
class UserControl1{
public void HandleButtonClick(object sender, EventArgs e){
((MasterViewModel) DataContext).DoUserControlAction1();
}
}
此类逻辑应位于已绑定到主控件的ViewModel中。
如果您没有绑定,您可以随时向子控件添加事件,并将它们冒泡到主控件并在那里处理。
答案 1 :(得分:0)
如果您使用的是PRISM,则可以使用EventAggregator或MVVMLight中的消息传递模式将消息从子userControls VM传递到父控制VM。
这种类型的分离可以帮助封装控件之间的依赖关系。