ViewModel 更新中断用户与绑定 TextBox 的交互

ViewModel updates interrupts user interaction with bound TextBox

我遇到了用户输入被绑定 ViewModel 的更新中断的问题。

ViewModel 公开了一个数值 ,它每秒都在变化。 这绑定到视图中的 TextBox。我们希望 TextBox 显示这个值,它做得很好。

但是,当用户单击 TextBox 并尝试输入新值时,模型中的值会更新,导致用户在文本框中输入的值被覆盖。

如何最轻松地解决这个问题,在同一控件中支持用户输入和定期更新?我将不胜感激代码示例 (C# / 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 并单击 Button,因此文本框失去焦点并将值发送到名称 属性。调试打印以下序列:

1 2个 3个 56 4