2015-04-07 33 views
1

我有XAML的下列位:的DataTemplates和DataContext的繼承

Window.DataContext> 
    <viewModel:ProductBuilderVm/> 
</Window.DataContext> 

<UNNECESSARY DETAILS SNIP> 

<TabControl ItemsSource="{Binding TabViewModels}" SelectedItem="{Binding SelectedTabVm}"> 
     <TabControl.Resources> 
      <DataTemplate DataType="{x:Type viewModel:ProductDefinitionVm}"> 
       <view:ProductDefinition></view:ProductDefinition> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type viewModel:CouplingsViewVm}"> 
       <view:CouplingsView></view:CouplingsView> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type viewModel:RulesVm}"> 
       <view:RulesView></view:RulesView> 
      </DataTemplate> 
     </TabControl.Resources> 
    </TabControl> 

我在這裏的想法是創建1個主視圖模型(ProductBuilderVm)擔任「父」在TabControl的三個的ViewModels。我認爲我有這個工作,但現在我試圖在這些孩子之間進行溝通,我意識到他們每個人都是一個單獨的實例,彼此之間沒有任何關係。

我怎樣才能重構這個窗口有1個ProductBuilderVm,其下有3個Vm的孩子?目標是從第一個孩子那裏獲取數據供第二個孩子使用。

謝謝!

+0

你可能只是有parentVm引用存儲到3子VM也 – reggaeguitar

回答

2

我能想到在ViewModels之間實現傳值的最簡單方法是使用像MVVM Light Messenger類:https://msdn.microsoft.com/en-us/magazine/dn745866.aspx

您註冊每個視圖模型接收消息:

//Register for custom typed message 
Messenger.Default.Register<MyMessageType>(this, OnMyMessageTypeReceived); 
//Register for string messages 
Messenger.Default.Register<NotificationMessage>(this, NotificationMessageReceived); 

然後你就可以使用發送消息到一個視圖模型:

//String message 
Messenger.Default.Send(new NotificationMessage("SetupMyProductDefinitionVm")); 
//Custom typed message sent to ViewModel of specific type 
var myMsg = new MyMessageType(); 
Messenger.Default.Send<MyMessageType, ProductDefinitionVm>(myMsg);