Wpf MVVM时,修改viewModel无效问题

 <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实际上为属性外的一个方法

原文地址:https://www.cnblogs.com/hurui1/p/13854190.html