首頁 > 後端開發 > C++ > ViewModel 如何在遵守 MVVM 原則的同時關閉表單?

ViewModel 如何在遵守 MVVM 原則的同時關閉表單?

Linda Hamilton
發布: 2025-01-23 02:37:12
原創
375 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板