>백엔드 개발 >C++ >MVVM의 ViewModel에서 WPF 양식을 닫는 방법은 무엇입니까?

MVVM의 ViewModel에서 WPF 양식을 닫는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-23 02:51:09293검색

How to Close a WPF Form from the ViewModel in MVVM?

WPF의 MVVM 디자인 패턴에서 일반적인 과제는 ViewModel에서 뷰(예: 양식)를 닫는 방법입니다. ViewModel은 일반적으로 비즈니스 로직 관리를 담당하고, 뷰는 사용자 인터페이스(UI) 표시를 담당합니다.

문제: ViewModel에 뷰 지식이 부족합니다

설계상 ViewModel은 뷰에 대한 직접적인 지식을 가져서는 안 됩니다. 이는 우려 사항의 분리를 보장하고 UI 독립성을 허용합니다. 그러나 양식을 닫으려면 보기에 액세스해야 하므로 문제가 될 수 있습니다.

일반적인 솔루션

기존 CodeBehind 방법: 여기에는 뷰의 코드 숨김 파일에 양식을 닫는 코드를 배치하는 작업이 포함됩니다. 이는 MVVM 패턴을 위반하고 뷰와 ViewModel 간의 결합을 도입합니다.

스타일 트리거가 있는 추가 속성: 양식에 연결된 속성을 정의하고 연결된 속성이 설정되면 스타일 트리거를 사용하여 양식을 닫을 수 있습니다. 이 솔루션은 MVVM 원칙을 준수하지만 추가 코드가 필요하고 번거로울 수 있습니다.

간단한 솔루션: DialogCloser 추가 속성

DialogCloser라는 사용자 정의 연결 속성을 생성하여 이 프로세스를 단순화할 수 있습니다. 이 속성은 양식의 DialogResult를 나타내는 bool? 매개 변수를 사용합니다. 이 속성의 값이 설정되면 양식을 포함하는 Window 개체의 DialogResult 속성이 자동으로 설정됩니다.

<code class="language-csharp">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 뷰의 Window 요소에 적용하세요.

<code class="language-xml"><Window ... xc:DialogCloser.DialogResult="{Binding DialogResult}" xmlns:xc="clr-namespace:ExCastle.Wpf"></Window></code>

ViewModel에서 DialogResult 속성을 부울 속성에 바인딩합니다.

<code class="language-csharp">public class MyViewModel : INotifyPropertyChanged
{
    ...
    private bool? _dialogResult;
    public bool? DialogResult
    {
        get { return _dialogResult; }
        set
        {
            _dialogResult = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DialogResult)));
        }
    }
    ...
}</code>

ViewModel에 DialogResult 속성이 설정되면 DialogCloser 연결된 속성이 포함된 Window 개체의 DialogResult를 자동으로 업데이트하여 양식을 효과적으로 닫습니다.

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

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