MVVM アーキテクチャを維持しながら ViewModel がフォームを閉じるにはどうすればよいですか?
MVVM (Model-View-ViewModel) の中心原則では、ViewModel が View の詳細を認識しないようにする必要があります。 ただし、ViewModel がフォームの終了を通知する必要があるシナリオが発生します。 MVVM のベスト プラクティスを支持する 2 つのソリューションを見てみましょう:
方法 1: 添付プロパティ
このメソッドは添付プロパティを使用して、ViewModel と View の間の通信ギャップを橋渡しします。 添付プロパティはフォームの DialogResult
を直接設定します。
実装:
<code class="language-csharp">using System.Windows; using System.Windows.Interactivity; namespace ExCastle.Wpf { public static class DialogCloser { public static readonly DependencyProperty DialogResultProperty = DependencyProperty.RegisterAttached( "DialogResult", typeof(bool?), typeof(DialogCloser), new PropertyMetadata(DialogResultChanged)); private static void DialogResultChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { var window = d as Window; if (window != null) window.DialogResult = e.NewValue as bool?; } public static void SetDialogResult(Window target, bool? value) { target.SetValue(DialogResultProperty, value); } } }</code>
XAML 統合:
<code class="language-xml"><Window ... xc:DialogCloser.DialogResult="{Binding DialogResult}" xmlns:xc="clr-namespace:ExCastle.Wpf"> ... </Window></code>
ViewModel は DialogResult
プロパティを設定し、添付プロパティのロジックをトリガーしてウィンドウを閉じます。
メソッド 2: インタラクション要素 (動作またはコマンド)
このアプローチでは、ビュー内の動作またはコマンドを利用して仲介者として機能します。 ViewModel は動作またはコマンドをトリガーし、フォームを閉じます。これにより柔軟性が向上しますが、複雑さが増します。
結論:
どちらの手法も、MVVM に違反することなく ViewModel 駆動のフォーム クロージャを可能にします。添付プロパティのアプローチはよりシンプルかつ直接的ですが、相互作用要素のアプローチはより優れた拡張性を提供します。最適な選択は、アプリケーション固有のニーズと複雑さによって異なります。
以上がViewModel は MVVM 原則に従いながらフォームを閉じるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。