c# - 如何手动更新多重绑定(bind)

标签 c# wpf converter multibinding

Binding 有问题。 Rectangle.Fill 依赖属性通过转换器绑定(bind)到 ObservableCollection。虽然 ObservableCollection 实现了 INotifyCollectionChanged,但绑定(bind)并未更新。然而,我设法通过将我的委托(delegate)附加到集合的更改通知事件并手动刷新绑定(bind)来解决这个问题:

    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。

最佳答案

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

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

关于c# - 如何手动更新多重绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5577887/

相关文章:

c# - WPF - 处理自定义控件上的自定义附加事件

wpf - 获取实际的 WPF 网格宽度

c# - WPF - 通过 TableAdapter、DataContext/Dataview 和 DataGrid 将数据库编辑到 TextBox

audio - 将.AU文件转换为.OGG文件

json - grails.converters.JSON 除了少数属性

java - 寻找代码转换器以将普通 Java 代码转换为反射式代码

c# - 非托管导出,将字符串数组从 C++ 传递到 C#

c# - 如何在 ASP.NET MVC 中设置时区?

c# - 将 Ocelot 16.0 与 ASP.Net Core 3.1 集成无法正常工作,因为我需要将 Swagger 与 Ocelot 一起使用

c# - WPF 按钮在禁用时更改 Rectangle.OpacityMask