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

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

Barbara Streisand
リリース: 2024-12-29 18:26:10
オリジナル
860 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート