我的模型实现了INotifyPropertyChanged,并且我有一个WPF窗口绑定到它(双向绑定)。
我需要知道什么时候通过绑定UI来更改模型,这样我就可以从另一个模块调用Update方法(然后这个模块会将我的模型复制到它的内部结构中)。模型也可以由另一个模块进行更改。
如何告诉(在我的PropertyChanged 事件处理程序中)更改是否起源于我的UI,而不是其他模块?
如果触发PropertyChanged事件的是另一个模块,我不想调用Update方法。
发布于 2011-05-13 10:40:15
我自己对WPF来说还是很新的,但是我能想到的唯一一种显而易见的方法就是在模型中添加额外的set方法,这些方法可以在不直接改变属性的情况下修改备份存储,从而触发PropertyChanged事件。要删除复制,属性设置器可能也应该调用这些方法,并且应该有一个布尔参数fireChangedEvent。就像这样:
public string SomeThing
{
get { return _someThing; }
set { SetSomeThing(value, true); }
}
public void SetSomeThing(string value, bool fireChangedEvent)
{
_someThing = value;
if(fireChangedEvent)
{
NotifyPropertyChanged("SomeThing");
}
}然后,在另一个模块中,它将是
public void DoStuff
{
// ...
model.SetSomeThing("foo",false);
// ...
}这不是一个优雅的方法,我知道,我希望别人能想出更聪明的东西,但我想不出一个很好的方法,从一个房地产策划人的内部,究竟是什么设置了这个属性。
希望这至少是一个变通的建议。
https://stackoverflow.com/questions/5988251
复制相似问题