gpt4 book ai didi

wpf - 有没有办法获取窗口的所有 BindingExpression 对象?

转载 作者:行者123 更新时间:2023-12-02 08:55:46 25 4
gpt4 key购买 nike

有没有办法获取窗口的所有 BindingExpression 对象?

当需要触发刷新表单的 PropertyChanged 事件数量太高且不是一个好的选择时,我尝试刷新表单。我正在考虑以另一种方式进行操作,即表单/窗口可以重新查询所有绑定(bind)。

最佳答案

如果您使用参数为 nullString.EmptyPropertyChangedEventArgs 引发 PropertyChanged,则绑定(bind)所有属性都会更新。

[MSDN Reference ]

我认为,相反的做法要复杂得多,而且可能会消耗更多的性能。您需要检查整个窗口中每个 DependencyObject 的每个 DependencyProperty 是否有绑定(bind)。

编辑:编写了以下粗略的扩展方法,该方法可以满足您的要求,效率非常低(可能还有改进的空间,但您仍在处理相当复杂的算法):

public static void UpdateAllBindings(this DependencyObject o)
{
//Immediate Properties
List<FieldInfo> propertiesAll = new List<FieldInfo>();
Type currentLevel = o.GetType();
while (currentLevel != typeof(object))
{
propertiesAll.AddRange(currentLevel.GetFields());
currentLevel = currentLevel.BaseType;
}
var propertiesDp = propertiesAll.Where(x => x.FieldType == typeof(DependencyProperty));
foreach (var property in propertiesDp)
{
BindingExpression ex = BindingOperations.GetBindingExpression(o, property.GetValue(o) as DependencyProperty);
if (ex != null)
{
ex.UpdateTarget();
}
}

//Children
int childrenCount = VisualTreeHelper.GetChildrenCount(o);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(o, i);
child.UpdateAllBindings();
}
}

关于wpf - 有没有办法获取窗口的所有 BindingExpression 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023025/

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