他の View Model から Main View Model の関数を呼び出す
このシナリオでは、TreeView と contentPresenter を含むプログラムがあり、それぞれに独自のビューモデル。 mainWindowViewModel は contentPresenter の表示を制御しており、手動で更新したいと考えています。
TreeViewViewModel から MainWindowViewModel にアクセス
提供されたコード スニペットは、DataContext を使用して MainWindowViewModel を取得しようとします。 MainWindowVM は TreeViewViewModel ではないため、これは正しくありません。 DataContext.
親子通信用のデリゲート オブジェクト
一般的なアプローチは、親ビュー モデルと子のビュー モデル間の両方向の通信を可能にするデリゲート オブジェクトを使用することです。デリゲート オブジェクトは、ビュー モデル間でパラメーターを渡すためだけでなく、あらゆる親子関係に使用できます。
MainWindowViewModel のメソッドの呼び出し
MainWindowViewModel のメソッドを呼び出すにはTreeViewViewModel では、リンクされた回答のデリゲートをメソッドに置き換えます。例:
public void ParameterViewModel_OnParameterChange(string parameter) { // Call MainWindowViewModel method here MainWindowVM.UpdateDisplay(); }
または、パラメータを一切取らないデリゲートを定義できます:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
親 View Model で、子のメソッドを呼び出すことができます。デリゲートが呼び出されたときのビュー モデル:
public void ChildViewModel_OnReadyForUpdate() { UpdateDisplay(); }
親ビューへの直接バインディングModel
もう 1 つの簡単なアプローチは、子ビューから親ビュー モデルに直接バインドすることです。これにより、たとえば、子ビューの Button.Command プロパティを親 View Model の ICommand プロパティにバインドできます。
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
これは、MainWindowViewModel が MainWindow の DataContext として設定されていることを前提としています。
以上がWPF で他の View Model からメイン View Model 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。