gpt4 book ai didi

c# - 仅在依赖属性更改值后引发事件

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:36 33 4
gpt4 key购买 nike

我有这样的情况,我有几个相互关联的控件。我对所述控件的 Current/SelectedValue 使用双向绑定(bind),这样当用户更改值时,更改会反射(reflect)在我的 View 模型的属性中。问题是,绑定(bind)在已更改属性的 setter 处触发更改后,我需要根据第一个更改其他控件,更新 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/endedit 方法不会做太多,只是检查启动操作的 prop 是否与调用 endedit 的 prop 相同,因此后续的 beginedits 将被忽略。 EndEdit 我们将确保只有在 PropA 的 setter 中我们才能确定所有属性都已更改并且我们可以发送事件,一种事务。

虽然我认为这可行,但我认为这对 setter 和 begin/ended 来说有点太多了,对于这个简单的事情来说似乎有点过分了。

也许使用双向绑定(bind)不是这种情况的最佳选择,我应该从代码隐藏的方法而不是属性 setter 中进行更新。

关于如何以其他方式执行此操作的任何建议?

最佳答案

恕我直言,这里最“犹太”的方法是使用 DependecyProperties 在它们的强制处理程序中包含冲突代码,就像 UI 组件一样。

另一种方法是在 VM 字段而不是属性上应用逻辑,然后触发 UpdateTarget() 进行绑定(bind)。

关于c# - 仅在依赖属性更改值后引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159704/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com