ホームページ >バックエンド開発 >C++ >WPF アプリケーションで子 View Model から Main View Model 関数を呼び出すにはどうすればよいですか?

WPF アプリケーションで子 View Model から Main View Model 関数を呼び出すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 18:26:10849ブラウズ

How Can I Invoke Main View Model Functions from Child View Models in a WPF Application?

他の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。