如果它是数据绑定,我如何将表单/字段标记为“脏”?

时间:2009-03-10 02:39:47

标签: c# .net wpf validation

如果我有数据绑定表单,我如何知道用户是否已修改它(通过在文本框中键入文本,或通过选择组合框中的项目)?我试过挂钩我的文本框的“TextChanged”事件,但问题是,当我的表单参与数据绑定时,“TextChanged”事件触发,过早地将我的表单标记为“脏”。

4 个答案:

答案 0 :(得分:3)

尝试实施

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));
}

和databind一样

<TextBox Text="{Binding UserName}"/>

答案 1 :(得分:1)

您的模型类是否实现了INotifyPropertyChanged?如果是这样,您可以在类上为PropertyChanged事件添加处理程序,并监视要更改的属性。

如果您尚未实现INotifyPropertyChanged,也可以在此处使用您用于通知UI层更新的机制吗?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

绑定控件后,调用SetAsClean()。通过处理一些BindingSources事件,可能会将此方法调用封装在同一脏跟踪类中。