> 백엔드 개발 > C++ > MVVM의 연결된 속성을 사용하여 ViewModel에서 WPF 양식을 닫으려면 어떻게 해야 합니까?

MVVM의 연결된 속성을 사용하여 ViewModel에서 WPF 양식을 닫으려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-23 02:44:11
원래의
189명이 탐색했습니다.

How Can I Close a WPF Form from the ViewModel Using an Attached Property in MVVM?

연결된 속성을 사용하여 MVVM에서 WPF 양식 닫기

MVVM 애플리케이션에서는 ViewModel이 실제 뷰를 모르기 때문에 양식 닫기를 관리하는 것이 어려울 수 있습니다. 이 문서에서는 연결된 속성을 사용하여 ViewModel에서 양식을 원활하게 닫는 우아한 솔루션을 살펴봅니다.

딜레마

ViewModel이 사용자 자격 증명을 보유하는 일반적인 로그인 양식을 생각해 보세요. 로그인 명령을 제출하면 ViewModel이 로그인 작업을 시작합니다.

  • 로그인에 성공한 후에는 로그인 양식을 닫고 유효한 DialogResult가 반환되어야 합니다.
  • 로그인이 유효하지 않은 경우 오류 메시지가 표시되고 양식은 열린 상태로 유지됩니다.

추가 속성으로 장벽을 허무세요

이 문제를 해결하기 위해 추가 속성을 활용하여 ViewModel과 View 사이의 격차를 해소할 수 있습니다.

<code class="language-xml"><Window ... DialogResult="{Binding DialogResult, Source={StaticResource ViewModel}}"
       xmlns:xc="clr-namespace:ExCastle.Wpf">
</Window></code>
로그인 후 복사

이 속성은 ViewModel의 DialogResult 속성을 창의 DialogResult 속성에 바인딩합니다. ViewModel이 DialogResult를 수정하면 연결된 속성은 자동으로 창의 DialogResult를 업데이트하고 그에 따라 양식을 닫습니다.

코드 구현

첨부된 속성의 코드는 다음과 같습니다.

<code class="language-csharp">using System.Windows;

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>
로그인 후 복사

ViewModel에서 INotifyPropertyChanged를 구현하고 로그인이 성공하면 DialogResult 속성을 업데이트합니다.

<code class="language-csharp">private bool? _dialogResult;
public bool? DialogResult
{
    get { return _dialogResult; }
    set
    {
        _dialogResult = value;
        OnPropertyChanged(nameof(DialogResult));
    }
}

// 登录命令逻辑
public ICommand LoginCommand { get; set; }</code>
로그인 후 복사

단순함과 순수함

이 접근 방식은 MVVM 원칙에 영향을 주지 않고 양식 닫기 문제를 우아하게 해결합니다. ViewModel은 뷰에서 분리된 상태로 유지되는 동시에 간단한 속성 바인딩을 통해 양식 닫기를 효과적으로 제어합니다.

위 내용은 MVVM의 연결된 속성을 사용하여 ViewModel에서 WPF 양식을 닫으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿