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中文网其他相关文章!