2017-01-04 10 views
0

私はいくつかの情報を編集できるウィンドウを持っています。保存すると、その情報はデータベースに保存されます。情報を表示する親ウィンドウは、前述のデータベースから情報を取得します。ただし、子ウィンドウを閉じると、情報が更新されます。これを行うための最良の方法は、親ウィンドウのviewmodel(元々情報を取り込むメソッド)からメソッドを呼び出すことです。これを行うための最良の方法は、ビューのコマンドバインディング内のRelativeSource FindAncestorです。 しかし、ブレークポイントを設定した後、私はdelegateコマンドによって呼び出されたメソッドが決してトリガーされないと判断しました。親のviewmodelで親のビューモデルから親戚の名前でコマンドを呼び出す

<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; 

} 
+0

親ウィンドウは、子ウィンドウの視覚的祖先ではないため、RelativeSourceを使用して別のウィンドウにバインドすることはできません。 – mm8

答えて

1

は、使用MVVMフレームワークによって、あなたは次のように、EventAggregator実装を使用することができますはPrismMessengerMVVM Lightです。基本的に、子ビューモデルはコマンド実行時に通知を送信/発行し、親ビューモデルはその通知にサブスクライブし、独自の通知ハンドラメソッドを実行します。

関連する問題