【问题标题】:How to update multibinding manually如何手动更新多重绑定
【发布时间】:2011-07-31 11:27:12
【问题描述】:

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 事件?

标签: c# wpf converter multibinding


【解决方案1】:

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

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

【讨论】:

  • 大多数情况下 getBinding 用于手动源更新...为此您可以使用通用的:BindingExpressionBase be = BindingOperations.GetBindingExpressionBase(colorRectangle, Rectangle.FillProperty); 这样无论是 Binding、MultiBinding 还是任何其他将出现的方法都无关紧要稍后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2018-12-23
相关资源
最近更新 更多