내 ViewModel을 사용자가 텍스트 상자에서 텍스트를 변경하고 있다고 어떻게 말할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1013208

  •  06-07-2019
  •  | 
  •  

문제

그러니 내가 있다고 가정 해 봅시다 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"를 설정하여 사용자가 입력 할 때 업데이트하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top