ViewModel обновляет прерывания взаимодействия пользователя со связанным TextBox
У меня возникла проблема, когда пользовательский ввод прерывается обновлениями из связанной ViewModel.
ViewModel предоставляет числовое значение, которое меняется каждую секунду. Это связано с TextBox
в представлении. Мы хотим, чтобы TextBox
отображал это значение, и это хорошо.
Однако, когда пользователь нажимает на TextBox
и пытается ввести новое значение, значение в модели обновляется, что заставляет перезаписываемое пользователем значение в текстовом поле перезаписываться.
Как я могу наиболее легко решить эту проблему, поддерживая ввод пользователя и регулярные обновления в одном элементе управления? Я был бы признателен за примеры кода (С#/XAML).
Если вам нужно больше деталей, просто спросите :)
Когда TextBox получает фокус (свойство IsFocused равно true), я меняю тип привязки, чтобы он не обновлялся, если он не потерял фокус.
ViewModel:
class MainViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
Debug.WriteLine(value);
OnPropertyChanged();
}
}
public MainViewModel()
{
Task.Factory.StartNew(async () =>
{
for (int i = 0; i < 1000; i++)
{
Name = i.ToString();
await Task.Delay(3000);
}
});
}
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
XAML:
<StackPanel>
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Text" Value="{Binding Name, Mode=OneWay}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsFocused}" Value="True">
<Setter Property="Text" Value="{Binding Name, Mode=OneWayToSource, UpdateSourceTrigger=LostFocus}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<Button Content="Click"/>
</StackPanel>
Я получил последовательность 2,3, затем я ввел 56 и нажал кнопку, чтобы текстовое поле потеряло фокус и отправило значение в свойство Name. Отладка напечатала следующую последовательность:
1 2 3 56 4
- Вопросы
- Wcf-binding
- ViewModel обновляет прерывания взаимодействия пользователя со связанным TextBox