zoukankan      html  css  js  c++  java
  • 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实际上为属性外的一个方法
    
    
  • 相关阅读:
    函数length属性
    vue面试题
    ES6引进新的原始数据类型symbol使用及特性
    jq动画
    防抖和节流
    this指向
    前端:性能优化之回流和重绘
    react生命周期
    vue生命周期
    react-redux的实现原理
  • 原文地址:https://www.cnblogs.com/hurui1/p/13854190.html
Copyright © 2011-2022 走看看