- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法获取窗口的所有 BindingExpression 对象?
当需要触发刷新表单的 PropertyChanged 事件数量太高且不是一个好的选择时,我尝试刷新表单。我正在考虑以另一种方式进行操作,即表单/窗口可以重新查询所有绑定(bind)。
最佳答案
如果您使用参数为 null
或 String.Empty
的 PropertyChangedEventArgs
引发 PropertyChanged
,则绑定(bind)所有属性都会更新。
我认为,相反的做法要复杂得多,而且可能会消耗更多的性能。您需要检查整个窗口中每个 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/
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target propert
我们有一些具有特定数据的派生控件类。这些控件还设置数据错误信息并绑定(bind)到某些特定属性。例如,如果属性 IsNew(假设它存在)为 true,则背景会突出显示。 现在我想知道,如果我使用这些控
测试场景: 我有一个带有 DependencyProperty A 的控件。 我有一个带有属性 A 的 ViewModel,我使用 OneWayToSource 绑定(bind)绑定(bind)到控件
有没有办法获取窗口的所有 BindingExpression 对象? 当需要触发刷新表单的 PropertyChanged 事件数量太高且不是一个好的选择时,我尝试刷新表单。我正在考虑以另一种方式进行
我正在开发基于 WPF/PRISM 的应用程序。父 View (usercontrol)中有许多区域, subview (usercontrol)加载在这些区域中。当加载 subview 时,我可以在
我正在尝试找出绑定(bind)表达式的源属性类型。我想这样做是因为我想使用 UpdateSourceExceptionFilter提供比一般的“无法转换”更有用的错误消息。 在 .NET 4.5 中我
以下代码片段是我的问题的简化版本。基本上,我试图捕获调用 updatesource 时我的 setter 中发生的错误,并将其传播到如下所示的 catch block 。问题是如果在 updateso
无法解决这个问题,我正在努力使这个模板尽可能多才多艺。尝试将 TextBlock 居中时出现以下错误,HorizontalAlignment 不起作用。 System.Windows.Data E
谁能建议一种在 Silverlight 中为 WPF 中存在的 UpdateTarget() 方法创建解决方法的方法?删除 DP 上存在的现有绑定(bind)并手动设置值对我来说不是一个选项。谢谢 最
我的 View 模型中的命令绑定(bind)到我的 WPF 应用程序中的用户控件时遇到问题。这些命令在用户选中或取消选中 checkBox 时运行。话虽如此,这些命令显然绑定(bind)到 check
简而言之(?),我有一个 ListView(目标)单向绑定(bind)到 XmlDataProvider(源)双向绑定(bind)到 TextBox (目标)对控件绑定(bind)使用标准 XAML,
BusyIndicator.xaml
我们都可以在 Visual Studio 输出窗口中看到运行时 BindingExpression 错误。但是我们可以在正在运行的应用程序本身中捕获这些事件吗?我听说 WPF 跟踪...这与此工具有关
我有一些 UI 元素在后面的代码中执行一些特定于 UI 的工作,然后更新数据上下文中的绑定(bind)。 WPF 元素: 后面的代码: /// /// Handle updati
我有一个 WPF CustomControl,它有一个名为 SelectedRange 的依赖属性。 在 XAML 中的应用程序中,绑定(bind)设置如下: SelectedRange="{Bind
我正在将 FrameworkElement 从 WPF 页面上的 StackPanel 转移到以编程方式创建的 StackPanel。在某个时候,我需要刷新绑定(bind)并获取属性值。 此时 Fra
对于出现在输出窗口中的这个错误,我已经搜索了几个小时。我对 WPF 中的绑定(bind)还很陌生,所以我确定我遗漏了什么。 错误全文(每个绑定(bind)路径都有一个,都和这个类似): System.
我在 Windows Phone 7 上使用 Silverlight。 使用 VirtualizingStackPanel 时收到大量“BindingExpression 路径错误”调试消息是否正常?
我需要使用反射来获取 DataGridTemplateColumn 控件中的绑定(bind)值(例如 HyperLinkButton)。有谁知道我该怎么做? 使用 TextBlock 执行此操作似
我试图将我的 W3CError 类型对象的集合绑定(bind)到 WPF ListView 控件。 这是一个不错的 13 行小类... 类 W3CError 公共(public)类型为 ErrorOr
我是一名优秀的程序员,十分优秀!