使用relativesources从父视图模型调用命令

时间:2017-01-04 22:14:40

标签: c# .net wpf binding

我有一个允许用户编辑某些信息的窗口。保存后,信息将保存在数据库中。显示信息的父窗口从前面提到的数据库中获取信息。但是在子窗口关闭时,信息应该更新。我可以想到的最好的方法是从父窗口的viewmodel(最初填充信息的方法)调用一个方法。我发现这样做的最好方法是在视图的命令绑定中通过RelativeSource FindAncestor。 但是,在设置断点之后,我确定了委托命令引发的方法永远不会被触发。

  <Button x:Name="closeButton" Content="Close" 
                    HorizontalAlignment="Left" 
                    VerticalAlignment="Top" 
                    Width="75" 
                    Margin="403,270,0,-46" 
                    Click="CloseWindows" 
                    Command="{Binding DataContext.MouseDownCommand, 
                              RelativeSource={RelativeSource FindAncestor, 
                              AncestorType={x:Type local:MainWindow}}}"/>
父视图模型中的

命令:

MakeSelection = new DelegateCommand(OnSelectionMade);

设置断点的方法:

private void OnSelectionMade()
{
     ShowDropDown = false;
     CarrierList.Clear();
     NodeTokenList = BackUpNodeTokenList; //reset list
     _populateCarrierListWorker = new BackgroundWorker();
     _populateCarrierListWorker.DoWork += new DoWorkEventHandler(PopulateCarrierList);
     _populateCarrierListWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
           (PopulateCarrierCompleted);
     _populateCarrierListWorker.RunWorkerAsync(_node);
     ShowCarrierList = true;

}

1 个答案:

答案 0 :(得分:1)

根据您使用的MVVM框架,您可以使用EventAggregator实施,例如PubSubEvent PrismMessenger MVVM Light }。基本上,子视图模型在其命令执行时发送/发布通知,父视图模型订阅此类通知并执行其自己的通知处理程序方法。