ホームページ >バックエンド開発 >C++ >子 View Model はどのようにして親 ViewModel 内の関数を呼び出すことができますか?

子 View Model はどのようにして親 ViewModel 内の関数を呼び出すことができますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 18:36:12313ブラウズ

How Can Child View Models Call Functions in a Parent ViewModel?

子 View Model からメイン ViewModel の関数を呼び出す

階層関係を持つ複数の View Model が関与するシナリオでは、次のことが必要になる場合があります。子 View Model 内から Main View Model の関数を呼び出します。この記事では、まさにこの要件に対処し、デリゲート オブジェクトを活用するソリューションを提供します。

説明されているシナリオを考えてみましょう。メイン ウィンドウのビュー モデルは、子ビューに表示されるコンテンツを管理します。タスクは、子ビュー モデルからメイン ウィンドウ ビュー モデルの関数を呼び出して、表示を手動で更新することです。

デリゲート オブジェクトの使用

採用されたデリゲート メソッドのアプローチソリューションと参照記事では、あらゆる親子シナリオでのコミュニケーションが可能になります。子ビュー モデルから親ビュー モデルへ、Window コード ビハインドから子 Window コード ビハインドへ、さらにはデータ リレーションシップ間でもアクセスが可能です。

実装

  1. 親ビューでデリゲートを定義するモデル:

    public delegate void ReadyForUpdate();
    public ReadyForUpdate OnReadyForUpdate { get; set; }
  2. 子ビュー モデル内で、ハンドラーをデリゲートにアタッチします:

    public void ReadyForUpdateHandler()
    {
        // Call the desired method in the parent view model
    }
  3. 親ビュー モデル内、次の場合にメソッドを呼び出します適切:

    public void ChildViewModel_OnReadyForUpdate()
    {
        // Call your method here
        UpdateDisplay();
    }

代替アプローチ

場合によっては、より単純なアプローチで十分な場合があります。子ビューから親 View Model への直接バインディングにより、親 View Model の ICommand プロパティに直接アクセスできます。

<!-- In a child view -->
<Button Content="Click Me" Command="{Binding DataContext.ParentCommand, RelativeSource={RelativeSource AncestorType={x:Type MainWindow}}}" />

このメソッドは、親 View Model インスタンスがメイン ウィンドウの DataContext として設定されていることを前提としています。

以上が子 View Model はどのようにして親 ViewModel 内の関数を呼び出すことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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