Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将表单/字段标记为;肮脏的;如果是';什么是数据绑定?_C#_.net_Wpf_Validation - Fatal编程技术网

C# 如何将表单/字段标记为;肮脏的;如果是';什么是数据绑定?

C# 如何将表单/字段标记为;肮脏的;如果是';什么是数据绑定?,c#,.net,wpf,validation,C#,.net,Wpf,Validation,如果我有一个数据绑定表单,我如何知道用户是否对其进行了修改(在文本框中键入文本,或在组合框中选择项目)?我已经尝试挂接到我的textbox的“TextChanged”事件,但问题是,当我的表单参与数据绑定时,“TextChanged”事件会触发,过早地将我的表单标记为“dirty”。当您第一次显示页面时,将表单值存储在数组中,当TextChanged事件触发时,与您已经获得的内容进行比较,如果是不同的脏表单。您的模型类是否实现了INotifyPropertyChanged?如果是这样,您可以为类

如果我有一个数据绑定表单,我如何知道用户是否对其进行了修改(在文本框中键入文本,或在组合框中选择项目)?我已经尝试挂接到我的textbox的“TextChanged”事件,但问题是,当我的表单参与数据绑定时,“TextChanged”事件会触发,过早地将我的表单标记为“dirty”。

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

您的模型类是否实现了
INotifyPropertyChanged
?如果是这样,您可以为类上的
PropertyChanged
事件添加一个处理程序,并观察相关属性的变化

如果您还没有实现INotifyPropertyChanged,那么您用来通知UI层更新的机制也可以在这里使用?

尝试实现

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}"/>

-->

我知道这有点晚了,但我喜欢这种方法:)天哪


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

非常小或改进:您可以通过以下方式减少嵌套:if(value==\u UserName)return;减少一点视觉混乱。不要认为这适用于WPF。