他の View Model からのメイン View Model 関数の呼び出し
問題:
アプリケーション内ツリー ビューと複数のコンテンツ プレゼンターを使用して、メイン ウィンドウのビュー モデル内で関数を呼び出そうとします。 (MainWindowViewModel) ツリー ビュー ビュー モデル (TreeViewViewModel) から。 MainWindowViewModel がこれらの変更を制御するため、これは表示を手動で更新するために必要です。
解決策:
デリゲート オブジェクトの使用は、この親子通信の実行可能な解決策です。デリゲート メソッドは、子-親ビュー モデル、コードビハインド関係、純粋なデータ相互作用など、さまざまなコンテキストで使用できます。デリゲートの詳細については、Microsoft の「デリゲート (C# プログラミング ガイド)」ドキュメントを参照してください。
デリゲートの実装:
TreeViewViewModel では、デリゲートを実装して、親ビューモデルに戻るパス。子ビュー モデルの準備ができたときに呼び出すデリゲート メソッドを定義します:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
メイン ビュー モデル (MainWindowViewModel) は、ハンドラーのアタッチ時に UpdateDisplay メソッドをサブスクライブします:
public void TreeViewViewModel_OnreadyForUpdate() { UpdateDisplay(); }
データ バインディングのアプローチ:
あるいは、次のことを検討してください。子ビューから親ビューモデルへの直接データバインディングを含む、より単純なアプローチです。たとえば、ボタン コマンド プロパティをバインドします:
<!-- In TreeViewView --> <Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />
これは、MainWindow の DataContext が親 View Model のインスタンスに設定されていることを前提としています。
以上がWPF アプリケーションで子 View Model から Main View Model 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。