我想只创建一次绑定,但不断更改其Source
。
这是我的代码。
public static readonly DependencyProperty TempDummyProperty =
DependencyProperty.Register("TempDummy", typeof(object), typeof(Helper), new PropertyMetadata(null));
public object Source
{
get; set;
}
public object GetValueFromBinding(object data)
{
if (this.BindingData == null)
{
Binding b = new Binding();
b.Path = this.BindingPath;
b.Source = this.Source;
BindingOperations.SetBinding(this, TempDummyProperty, b);
this.BindingData = b;
}
this.Source = data;
BindingExpression be = BindingOperations.GetBindingExpression(this, TempDummyProperty);
be.UpdateTarget();
return this.GetValue(TempDummyProperty);
}
然而,当我调用此方法时,我总是返回null。
GetValueFromBinding(this.DataContext);
似乎Binding没有注意到源已被更改。
如何在不总是创建新Binding对象的情况下直截了当?
答案 0 :(得分:0)
Binding
仅仅是绑定的描述;它不是绑定的应用。 Binding
类是一个标记扩展,它生成BindingExpression
,而 是是应用于属性的基于表达式的值。
修改Binding
不会对该绑定的现有应用程序产生任何影响,并且BindingExpression
在应用后无法修改。
关于您的代码的几点意见:
您设置b.Source = this.Source
,然后更新this.Source
;这不会以任何方式影响b.Source
。
UpdateTarget()
告诉绑定从源属性手动更新目标属性的值。它不会使用生成它的Binding
进行检查,并查看来源是否已更改。
如果您希望保留Binding
并更新其Source
,则必须每次重新应用绑定(例如,使用SetBinding
)或基础{{1不会反映变化。