更改绑定源问题

时间:2014-10-21 11:55:50

标签: wpf

我想只创建一次绑定,但不断更改其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对象的情况下直截了当?

1 个答案:

答案 0 :(得分:0)

Binding仅仅是绑定的描述;它不是绑定的应用。 Binding类是一个标记扩展,它生成BindingExpression,而 是是应用于属性的基于表达式的值。

修改Binding不会对该绑定的现有应用程序产生任何影响,并且BindingExpression在应用后无法修改。

关于您的代码的几点意见:

  1. 您设置b.Source = this.Source,然后更新this.Source;这不会以任何方式影响b.Source

  2. UpdateTarget()告诉绑定从源属性手动更新目标属性的值。它不会使用生成它的Binding进行检查,并查看来源是否已更改。

  3. 如果您希望保留Binding并更新其Source,则必须每次重新应用绑定(例如,使用SetBinding)或基础{{1不会反映变化。

相关问题