如何手动更新多绑定?

15

我遇到了一个Binding的问题。 Rectangle.Fill 依赖属性绑定到了一个带有转换器的 ObservableCollection。虽然 ObservableCollection 实现了 INotifyCollectionChanged,但是绑定没有被更新。不过,我成功地通过将我的委托附加到集合的更改通知事件并手动刷新绑定来解决了这个问题:

    void ColorsCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        BindingExpression b = colorRectangle.GetBindingExpression(Rectangle.FillProperty);
        if (b != null)
            b.UpdateTarget();
    }

最近,我将Binding更改为MultiBinding,上面的解决方案就不再起作用了(bnull)。有没有一种方法可以强制MultiBinding更新目标属性?

最好的问候-- Spook。


你是否曾经弄清楚为什么Binding/Multibinding没有响应CollectionChanged事件? - skybluecodeflier
1个回答

27

对于多绑定,绑定表达式是MultiBindingExpression,它继承自BindingExpressionBase,但不继承自BindingExpression。因此,对于多绑定,GetBindingExpression 返回 null。相反,您可以使用 BindingOperations.GetMultiBindingExpression

MultiBindingExpression b = BindingOperations.GetMultiBindingExpression(colorRectangle, Rectangle.FillProperty);

9
大多数情况下,getBinding主要用于手动源更新。为此,您可以使用通用方法:BindingExpressionBase be = BindingOperations.GetBindingExpressionBase(colorRectangle, Rectangle.FillProperty); 这样就不必考虑绑定、多重绑定或以后可能出现的其他绑定类型。 - Tomer W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接