子 View Model からメイン ViewModel の関数を呼び出す
階層関係を持つ複数の View Model が関与するシナリオでは、次のことが必要になる場合があります。子 View Model 内から Main View Model の関数を呼び出します。この記事では、まさにこの要件に対処し、デリゲート オブジェクトを活用するソリューションを提供します。
説明されているシナリオを考えてみましょう。メイン ウィンドウのビュー モデルは、子ビューに表示されるコンテンツを管理します。タスクは、子ビュー モデルからメイン ウィンドウ ビュー モデルの関数を呼び出して、表示を手動で更新することです。
デリゲート オブジェクトの使用
採用されたデリゲート メソッドのアプローチソリューションと参照記事では、あらゆる親子シナリオでのコミュニケーションが可能になります。子ビュー モデルから親ビュー モデルへ、Window コード ビハインドから子 Window コード ビハインドへ、さらにはデータ リレーションシップ間でもアクセスが可能です。
実装
親ビューでデリゲートを定義するモデル:
public delegate void ReadyForUpdate(); public ReadyForUpdate OnReadyForUpdate { get; set; }
子ビュー モデル内で、ハンドラーをデリゲートにアタッチします:
public void ReadyForUpdateHandler() { // Call the desired method in the parent view model }
親ビュー モデル内、次の場合にメソッドを呼び出します適切:
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 サイトの他の関連記事を参照してください。