ViewModel 如何在保持 MVVM 架構的同時關閉表單?
MVVM(模型-視圖-視圖模型)的核心原則規定 ViewModel 應該不知道 View 的細節。 然而,有時會出現 ViewModel 需要發出表單關閉訊號的情況。 讓我們來探索兩種支援 MVVM 最佳實踐的解決方案:
方法一:附加屬性
此方法使用附加屬性來彌合 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
屬性,觸發附加屬性的邏輯來關閉視窗。
方法二:互動元素(行為或指令)
這種方法利用視圖中的行為或命令來充當中介。 ViewModel 觸發行為或指令,然後關閉表單。這提供了更大的靈活性,但增加了複雜性。
結論:
這兩種技術都可以在不違反 MVVM 的情況下實作 ViewModel 驅動的表單閉包。附加屬性方法更簡單、更直接,而互動元素方法提供了更大的可擴展性。最佳選擇取決於應用程式的具體需求和複雜性。
以上是ViewModel 如何在遵守 MVVM 原則的同時關閉表單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!