【问题标题】:Accessing binding context in Converter在 Converter 中访问绑定上下文
【发布时间】:2015-09-19 19:55:42
【问题描述】:

在允许用户添加不同对象(如矩形、椭圆、文本、图像等)的绘图应用程序中,我有一个“颜色框”,可让用户查看或更改所选对象的填充。如果选择了多个对象,我显然不能全部显示,所以我显示第一个选定对象的颜色。当用户更改“颜色框”的颜色时,我想更改所有选定对象的填充。 (这也是 VS 属性窗口的工作方式)

如何绑定我的“颜色框”的Brush 属性(输入Brush)来做这件事?

我已经尝试过的是:我将“颜色框”的Brush 属性绑定到选择对象,然后使用转换器检查选择对象,如果其中有一个或多个对象,它会返回Convert() 函数中第一个选定对象的颜色。

但问题是我无法实现ConvertBack(),因为它无法让我访问选择对象,因此我可以遍历所选对象并为它们分配新选择的颜色。

使用MultiBinding 也没有用,因为ConvertBack()value 参数是单个对象,我无法访问选择对象。一种想法是使用ConverterParameter 提供选择对象,但ConverterParameter is not bindable

另一个想法(hack?)是保持一个类级变量指向选择对象并在Convert()函数中赋值(通过在MultiBinding中传递选择对象)然后在ConvertBack()中使用该变量,但我不知道安全性如何,Convert()ConvertBack()会不会一直按顺序调用。

那么我该如何实现呢?

【问题讨论】:

    标签: wpf binding multibinding


    【解决方案1】:

    好的。事实证明这比我想象的要容易。对于未来的读者,我只是在我的虚拟机中添加了一个Brush 类型的属性(称为SelectionBrush),其getter 将返回第一个选定对象的Brush,其setter 将遍历整个选择并分配画笔到适当的对象(通过检查它们的类型)。不再需要转换器!

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2013-08-02
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 2010-11-10
      • 2014-05-31
      • 1970-01-01
      相关资源
      最近更新 更多