如果我有数据绑定表单,我如何知道用户是否已修改它(通过在文本框中键入文本,或通过选择组合框中的项目)?我试过挂钩我的文本框的“TextChanged”事件,但问题是,当我的表单参与数据绑定时,“TextChanged”事件触发,过早地将我的表单标记为“脏”。
答案 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事件,可能会将此方法调用封装在同一脏跟踪类中。