>백엔드 개발 >C++ >MVVM 원칙을 준수하면서 ViewModel이 양식을 닫을 수 있는 방법은 무엇입니까?

MVVM 원칙을 준수하면서 ViewModel이 양식을 닫을 수 있는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-23 02:37:12375검색

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

MVVM 아키텍처를 유지하면서 ViewModel이 양식을 닫을 수 있는 방법은 무엇입니까?

MVVM(Model-View-ViewModel)의 핵심 원칙은 ViewModel이 뷰의 세부 사항을 인식하지 못하도록 규정하고 있습니다. 그러나 ViewModel이 양식 종료를 신호해야 하는 시나리오가 발생합니다. MVVM 모범 사례를 유지하는 두 가지 솔루션을 살펴보겠습니다.

방법 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 기반 양식 폐쇄를 가능하게 합니다. 연결된 속성 접근 방식은 더 간단하고 직접적이며, 상호 작용 요소 접근 방식은 더 큰 확장성을 제공합니다. 최적의 선택은 애플리케이션의 특정 요구 사항과 복잡성에 따라 달라집니다.

위 내용은 MVVM 원칙을 준수하면서 ViewModel이 양식을 닫을 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.