ホームページ > バックエンド開発 > C++ > WPF で他の View Model からメイン View Model 関数を呼び出すにはどうすればよいですか?

WPF で他の View Model からメイン View Model 関数を呼び出すにはどうすればよいですか?

DDD
リリース: 2025-01-05 12:08:39
オリジナル
135 人が閲覧しました

How Can I Call Main View Model Functions from Other View Models in WPF?

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

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