【发布时间】:2010-11-11 22:02:26
【问题描述】:
我有这种情况,我有几个相互关联的控件。我对所述控件的 Current/SelectedValue 使用双向绑定,这样当用户更改值时,更改会反映在我的视图模型的属性中。问题是,在绑定触发更改属性的设置器处的更改后,我需要更改其他控件,基于第一个,更新 UI,然后仅发送一个带有所有受影响属性的新值的事件。我正在考虑按照这种方式做一些事情(类似于 IEditableObject):
public string PropA
{
get{(...)}
set
{
BeginEdit("PropA");
PropA = value;
PropB = SomeValueDependentOnA;
PropC = SomeValueDependentOnA;
OnPropertyChanged("PropA");
EndEdit("PropA"); //this is propA so send the event
}
public string PropB
{
get{(...)}
set
{
BeginEdit("PropB");
PropB = value;
PropA = SomeValueDependentOnB;
PropC = SomeValueDependentOnB;
OnPropertyChanged("PropB");
EndEdit("PropB");
}
(...)
begin/endit 方法作用不大,只是检查启动操作的道具是否与调用 endedit 的道具相同,因此将忽略进一步的 beginedits。 EndEdit 我们将确保只有在 PropA 的设置器中才能确定所有属性都已更改,并且我们可以发送事件,一种事务。
虽然我认为这会奏效,但我认为这在二传手上做的太多了,而且对于这个简单的事情来说,开始/结束似乎有点过头了。
对于这种情况,也许使用 2-way 绑定不是最好的选择,我应该从后面代码中的方法而不是属性设置器进行更新。
关于如何以其他方式执行此操作的任何建议?
【问题讨论】:
标签: c# wpf data-binding inotifypropertychanged