首页 >后端开发 >C++ >ViewModel 如何在遵守 MVVM 原则的同时关闭表单?

ViewModel 如何在遵守 MVVM 原则的同时关闭表单?

Linda Hamilton
Linda Hamilton原创
2025-01-23 02:37:12372浏览

How Can a ViewModel Close a Form While Adhering to MVVM Principles?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn