WPF의 ViewModel에서 TextBox 포커스 설정
WPF 애플리케이션 개발 시 ViewModel에서 특정 컨트롤의 포커스를 설정해야 하는 경우가 있습니다. 이는 연결된 속성과 바인딩 기술을 결합하여 달성할 수 있습니다.
ViewModel에서 UI 요소를 직접 참조하지 마세요
샘플 코드에서 cs.txtCompanyID
는 뷰의 UI 요소에 직접 액세스합니다. 일반적으로 ViewModel 레이어에서 UI 요소를 직접 참조하는 것은 권장되지 않습니다. 이렇게 하면 코드가 UI와 긴밀하게 결합되고 테스트 가능성이 떨어지기 때문입니다.
포커스 관리를 위해 첨부된 속성 사용
더 나은 접근 방식은 ViewModel 속성에 바인딩할 수 있는 연결된 속성을 사용하는 것입니다. 이 경우 연결된 컨트롤에 포커스가 있어야 하는지 여부를 나타내는 부울 값을 허용하는 IsFocused
이라는 연결된 속성을 만들 수 있습니다.
다음은 IsFocused
연결된 속성의 구현 예입니다.
<code class="language-csharp">public static class FocusExtension { public static bool GetIsFocused(DependencyObject obj) { return (bool)obj.GetValue(IsFocusedProperty); } public static void SetIsFocused(DependencyObject obj, bool value) { obj.SetValue(IsFocusedProperty, value); } public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached( "IsFocused", typeof(bool), typeof(FocusExtension), new UIPropertyMetadata(false, OnIsFocusedPropertyChanged)); private static void OnIsFocusedPropertyChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { var uie = (UIElement)d; if ((bool)e.NewValue) { uie.Focus(); // 忽略false值 } } }</code>
ViewModel에 추가 속성 바인딩
연결된 속성이 있으면 컨트롤에 포커스가 있어야 하는지 여부를 나타내는 ViewModel 속성에 바인딩할 수 있습니다. 뷰(XAML)에서 IsFocused
속성을 해당 ViewModel 속성에 바인딩할 수 있습니다.
<code class="language-xml"><TextBox local:FocusExtension.IsFocused="{Binding IsUserNameFocused}"></TextBox></code>
.NET 소스 코드를 사용하여 디버그
포커스를 설정하는 데 문제가 있는 경우 .NET 소스 코드를 디버깅하여 해당 동작에 대한 통찰력을 얻으세요. 여기에서 기본 프레임워크가 포커스를 처리하는 방법을 관찰하고 사용자 정의 구현의 차이점을 식별할 수 있습니다.
위 내용은 ViewModel에서 WPF TextBox에 포커스를 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!