是否可以在不知道绑定(bind)属性的情况下直接设置双向绑定(bind)后面的值?
我有一个附加属性,它绑定(bind)到这样的属性:
<Element my:Utils.MyProperty="{Binding Something}" />
现在我想更改有效存储在
Something
中的值从附属物的角度来看。所以我不能直接访问绑定(bind)的属性,而只能引用 DependencyObject
(即 Element 实例)和 DependencyProperty
对象本身。通过
DependencyObject.SetValue
简单设置时的问题是这有效地删除了绑定(bind),但我想更改底层的绑定(bind)属性。使用
BindingOperations
我可以得到Binding
和 BindingExpression
.现在有没有办法访问它背后的属性并改变它的值?
最佳答案
好的,我现在自己在绑定(bind)表达式上使用了一些反射技巧解决了这个问题。
我基本上查看绑定(bind)路径和响应数据项并尝试自己解决绑定(bind)。对于更复杂的绑定(bind)路径,这可能会失败,但对于我上面示例中的简单属性名称,这应该可以正常工作。
BindingExpression bindingExpression = BindingOperations.GetBindingExpression(dependencyObj, dependencyProperty);
if (bindingExpression != null)
{
PropertyInfo property = bindingExpression.DataItem.GetType().GetProperty(bindingExpression.ParentBinding.Path.Path);
if (property != null)
property.SetValue(bindingExpression.DataItem, newValue, null);
}
关于wpf - 直接设置绑定(bind)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121057/