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实际上为属性外的一个方法
    
    
  • 相关阅读:
    ES6入门 阮一峰
    NPM
    移动端BUG
    配置每次git push 不需要输入账号密码
    移动端rem布局,用户调整手机字体大小或浏览器字体大小后导致页面布局出错问题
    课程表
    岛屿数量
    二叉树的右视图
    c++设计模式——工厂模式
    克隆图
  • 原文地址:https://www.cnblogs.com/hurui1/p/13854190.html
Copyright © 2011-2022 走看看