WPF의 MVVM 디자인 패턴에서 일반적인 과제는 ViewModel에서 뷰(예: 양식)를 닫는 방법입니다. ViewModel은 일반적으로 비즈니스 로직 관리를 담당하고, 뷰는 사용자 인터페이스(UI) 표시를 담당합니다.
설계상 ViewModel은 뷰에 대한 직접적인 지식을 가져서는 안 됩니다. 이는 우려 사항의 분리를 보장하고 UI 독립성을 허용합니다. 그러나 양식을 닫으려면 보기에 액세스해야 하므로 문제가 될 수 있습니다.
기존 CodeBehind 방법: 여기에는 뷰의 코드 숨김 파일에 양식을 닫는 코드를 배치하는 작업이 포함됩니다. 이는 MVVM 패턴을 위반하고 뷰와 ViewModel 간의 결합을 도입합니다.
스타일 트리거가 있는 추가 속성: 양식에 연결된 속성을 정의하고 연결된 속성이 설정되면 스타일 트리거를 사용하여 양식을 닫을 수 있습니다. 이 솔루션은 MVVM 원칙을 준수하지만 추가 코드가 필요하고 번거로울 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!