wpf - 直接设置绑定(bind)值

标签 wpf binding attached-properties

是否可以在不知道绑定(bind)属性的情况下直接设置双向绑定(bind)后面的值?

我有一个附加属性,它绑定(bind)到这样的属性:

<Element my:Utils.MyProperty="{Binding Something}" />

现在我想更改有效存储在 Something 中的值从附属物的角度来看。所以我不能直接访问绑定(bind)的属性,而只能引用 DependencyObject (即 Element 实例)和 DependencyProperty对象本身。

通过 DependencyObject.SetValue 简单设置时的问题是这有效地删除了绑定(bind),但我想更改底层的绑定(bind)属性。

使用 BindingOperations我可以得到BindingBindingExpression .现在有没有办法访问它背后的属性并改变它的值?

最佳答案

好的,我现在自己在绑定(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/

相关文章:

c# - 为什么将整数分配给双重附加属性会出错?

wpf - 如何在 WPF 中的 XAML 中制作加号?

wpf - 简单的 MVVM 绑定(bind)问题

wpf - 绑定(bind)到另一个控件的 DataContext 的属性

WPF 多行 TextBlock LineBreak 问题

WPF 自定义 ICommand 实现和 CanExecuteChanged 事件

.net - KeyBinding 两个命令(一个在 VM 中,一个在 View 中)到一个键

wpf - 从源获取绑定(bind)目标?

WPF TextBox lostfocus 作为附加属性

c# - 具有附加属性的 ControlTemplate 中的命令绑定(bind)