代码之家  ›  专栏  ›  技术社区  ›  Mark Carpenter

如果窗体/字段是数据绑定的,如何将其标记为“脏的”?

  •  5
  • Mark Carpenter  · 技术社区  · 15 年前

    如果我有一个数据绑定表单,我如何知道用户是否修改了它(要么在文本框中键入文本,要么在组合框中选择一个项目)?我已经尝试钩住我的文本框的“textChanged”事件,但问题是,当我的窗体参与数据绑定时,“textChanged”事件将激发,过早地将我的窗体标记为“脏”。

    4 回复  |  直到 12 年前
        1
  •  3
  •   Jon Masters    15 年前

    尝试实施

    public partial class Window1 : INotifyPropertyChanged
    

    然后

    public event PropertyChangedEventHandler PropertyChanged;
    
    public string UserName
    {
        get { return _UserName; }
        set { if (value != _UserName)
        {
            _UserName = value;
            OnNotifyPropertyChanged("UserName");
        }}
    }
    
    private void OnNotifyPropertyChanged(string property)
    {
      if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
    

    像数据绑定一样

    <TextBox Text="{Binding UserName}"/>
    
        2
  •  1
  •   Andy    15 年前

    你的模型类实现了吗 INotifyPropertyChanged ?如果是这样,您可以为 PropertyChanged 类上的事件,并注意要更改的属性。

    如果你还没有实现 InotifyProperty已更改 ,您用来通知用户界面层更新的机制也可以在这里使用吗?

        3
  •  0
  •   SeanJA    15 年前

    当您第一次显示页面时,将表单值存储在数组中,当TextChanged事件激发时,与您已经得到的值进行比较(如果它是不同的脏表单)。

        4
  •  0
  •   br3nt    12 年前

    ---GT; http://www.mishainthecloud.com/2009/07/simple-dirty-tracking-for-winforms-in-c.html .

    我知道这有点晚了,但我喜欢这种方法:)封装的善良。

    绑定控件后,调用setAsClean()。通过处理一些bindingSources的事件,此方法调用可能被封装在同一个脏跟踪类中。