내 ViewModel을 사용자가 텍스트 상자에서 텍스트를 변경하고 있다고 어떻게 말할 수 있습니까?
문제
그러니 내가 있다고 가정 해 봅시다 MVVM 응용 프로그램과 나는 사용자가 텍스트 상자 그리고 그가 그것을 채우는 동안, 나는 그가 입력했는지 확인하고 싶습니다. 성 아직 고객의.
여기에 내 뷰 모델이 사용자가 언제 있는지 알 수있는 방법은 다음과 같습니다. Combobox에서 항목을 변경했습니다:
<ComboBox
ItemsSource="{Binding Customers}"
ItemTemplate="{StaticResource CustomerComboBoxTemplate}"
Margin="20"
HorizontalAlignment="Left"
SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"/>
그리고 여기에 내 뷰 모델이 사용자가 언제 있는지 알 수있는 방법이 있습니다. 슬라이더를 옮겼습니다:
<Slider Minimum="0"
Margin="10"
Width="400"
IsSnapToTickEnabled="True"
Maximum="{Binding HighestCustomerIndex, Mode=TwoWay}"
Value="{Binding SelectedCustomerIndex, Mode=TwoWay}"/>
그리고 여기에 내 뷰 모델이 사용자가 언제 있는지 알 수있는 방법이 있습니다. 텍스트 상자에서 텍스트를 변경하고 초점을 멀리 옮겼습니다. 텍스트 상자에서 :
<TextBox
Width="200"
Text="{Binding TypedCustomerName}"/>
하지만 내 뷰 모델이 사용자가 언제 있는지 알 수 있도록하려면 어떻게해야합니까? 텍스트 상자의 텍스트가 입력 할 때 변경되었습니다, 예 : 이와 같은 것 :
의사 코드 (TextChanged가 이벤트이므로 오류를 유발합니다) :
<TextBox
Width="200"
TextChanged="{Binding CurrentTextInTextBox}"/>
해결책
원한다면 텍스트 상자가 초점을 잃었을 때 ViewModel을 업데이트하는 대신 입력 할 때 업데이트하도록 설정할 수 있습니다. 그만큼 updateSourcetrigger 텍스트 상자의 텍스트 바인딩 속성에서 대부분의 다른 컨트롤과 마찬가지로 속성 변경 대신 기본적으로 LostFocus로 설정되지만 바인딩에서 명시 적으로 설정할 수 있습니다. 그렇게함으로써 VM 또는 M의 TypedCustomerName 속성은 UI에서 변경 될 때 업데이트됩니다.
<TextBox
Width="200"
Text="{Binding TypedCustomerName, UpdateSourceTrigger=PropertyChanged}"/>
그것이 당신이 찾고있는 것이 아니라면, 당신은 또한 사용할 수 있습니다 AttachedCommandBehaviors TextChanged 라우팅 된 이벤트를 뷰 모델에 존재하는 ICOMMAND에 바인딩합니다.
다른 팁
TextBoxEx 기본값은 LostFocus에서 업데이트하는 것입니다. UpdateSourCetrigger = "PropertyChanged"를 설정하여 사용자가 입력 할 때 업데이트하십시오.