<TextBox Name="txtRunAfter" Grid.Column="4" Text="{Binding Mode=TwoWay, Path=RunAfter}" Style="{StaticResource TestStepTextBox}"/>
在Combox的绑定中,经常要对数据进行校验。当我们发现新输入值错误,想回滚到之前值的时候。
private int _runAfter = 0; string RunAfter { get { returm _runAfter.ToString(); } set { int val = int.Parse(value); if(_runAfter!= val) { if(val <_order) _runAfter = val; else { _runAfter = 0; OnPropertyChanged(“ RunAfter”); } } } }
但是很多情况下更新失败,错误值依然显示,虽然后台viewModel已经更新为正确值。
为了避免这种情况,我们可以先更新一个不一样的值,然后使用Dispatcher延迟通知。
set { int val = int.Parse(value); if (_runAfter != val) { if (val < _order) { _runAfter = val; OnPropertyChanged("RunAfter"); } else { _runAfter = 0; Dispatcher.CurrentDispatcher.BeginInvoke( new Action<String>(OnPropertyChanged), DispatcherPriority.DataBind, "RunAfter"); } } }
//这里的new Action<String>(OnPropertyChanged)中
OnPropertyChanged实际上为属性外的一个方法