我有一個C#Silverlight應用程序。此應用程序具有帶2x2網格的UserControl。網格的每個單元都有自己的用戶控件。每個這些子UserControl元素都有一個Button。當用戶點擊一個孩子的按鈕時,我想執行一個父UserControl中的方法。此方法然後將信息發送到其他三個子UserControls。我該怎麼做呢?從Silverlight中的子UserControl調用父UserControl方法
謝謝!
我有一個C#Silverlight應用程序。此應用程序具有帶2x2網格的UserControl。網格的每個單元都有自己的用戶控件。每個這些子UserControl元素都有一個Button。當用戶點擊一個孩子的按鈕時,我想執行一個父UserControl中的方法。此方法然後將信息發送到其他三個子UserControls。我該怎麼做呢?從Silverlight中的子UserControl調用父UserControl方法
謝謝!
如果您使用綁定,你可以一個模型來主控的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從綁定的DataContext繼承父主用戶控件:
class UserControl1{
public void HandleButtonClick(object sender, EventArgs e){
((MasterViewModel) DataContext).DoUserControlAction1();
}
}
此類邏輯應位於已綁定到主控件的ViewModel中。
如果你沒有綁定,你可以隨時添加事件到子控件,然後將它們提升到主控件並在那裏處理。
如果您使用PRISM,則可以使用EventAggregator或MVVMLight中的消息傳遞模式將消息從子級userControls VM傳遞到父級控制VM。
這種分離類型可以幫助封裝控件之間的依賴關係。
嗨謝爾登,雖然我的父控件有一個ViewModel,我也想在父控件中做一些UI邏輯。出於這個原因,我希望在Parent.xaml.cs中實際執行一個方法。有沒有辦法做到這一點從兒童控制? – user70192 2011-03-28 14:39:51
在這種情況下,您最好的選擇是將事件添加到您在Parent.xaml.cs中訂閱的子控件。 所以,當你點擊你的子控件中的按鈕時,你的事件被觸發並在父控件中處理;然後可以調用您感興趣的方法。 – 2011-03-28 14:49:15
但是,另一種選擇是將Parent.xaml.cs中的代理傳遞給您的孩子以供他們調用。 ie: childControl.ParentMethodToCall(()=> someParentMethod()); 因此,將一個Action傳遞給給它一個委託的子控件,以便它可以調用父方法,該方法調用其內部方法。 – 2011-03-28 14:51:55