ホームページ > バックエンド開発 > C++ > ViewModel は MVVM 原則に従いながらフォームを閉じるにはどうすればよいでしょうか?

ViewModel は MVVM 原則に従いながらフォームを閉じるにはどうすればよいでしょうか?

Linda Hamilton
リリース: 2025-01-23 02:37:12
オリジナル
411 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート