2011-03-28 53 views
0

我有一個C#Silverlight應用程序。此應用程序具有帶2x2網格的UserControl。網格的每個單元都有自己的用戶控件。每個這些子UserControl元素都有一個Button。當用戶點擊一個孩子的按鈕時,我想執行一個父UserControl中的方法。此方法然後將信息發送到其他三個子UserControls。我該怎麼做呢?從Silverlight中的子UserControl調用父UserControl方法

謝謝!

回答

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從綁定的DataContext繼承父主用戶控件:

class UserControl1{ 
    public void HandleButtonClick(object sender, EventArgs e){ 
    ((MasterViewModel) DataContext).DoUserControlAction1(); 
    } 
} 

此類邏輯應位於已綁定到主控件的ViewModel中。

如果你沒有綁定,你可以隨時添加事件到子控件,然後將它們提升到主控件並在那裏處理。

+0

嗨謝爾登,雖然我的父控件有一個ViewModel,我也想在父控件中做一些UI邏輯。出於這個原因,我希望在Parent.xaml.cs中實際執行一個方法。有沒有辦法做到這一點從兒童控制? – user70192 2011-03-28 14:39:51

+0

在這種情況下,您最好的選擇是將事件添加到您在Parent.xaml.cs中訂閱的子控件。 所以,當你點擊你的子控件中的按鈕時,你的事件被觸發並在父控件中處理;然後可以調用您感興趣的方法。 – 2011-03-28 14:49:15

+0

但是,另一種選擇是將Parent.xaml.cs中的代理傳遞給您的孩子以供他們調用。 ie: childControl.ParentMethodToCall(()=> someParentMethod()); 因此,將一個Action傳遞給給它一個委託的子控件,以便它可以調用父方法,該方法調用其內部方法。 – 2011-03-28 14:51:55

0

如果您使用PRISM,則可以使用EventAggregator或MVVMLight中的消息傳遞模式將消息從子級userControls VM傳遞到父級控制VM。

這種分離類型可以幫助封裝控件之間的依賴關係。

相關問題