在Converter中访问绑定上下文



在一个绘图应用程序中,允许用户添加不同的对象,如矩形,椭圆,文本,图像等,我有一个"颜色框",让用户看到或改变所选对象的填充。如果有多个被选中的对象,我不能明显地显示全部,所以我显示第一个被选中对象的颜色。当用户改变"color box"的颜色时,我想改变所有选中对象的填充。(这也是VS属性窗口的工作方式btw)

我如何绑定我的"颜色盒"的Brush属性(类型Brush)来做这件事?

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

问题是,我没有办法实现ConvertBack(),因为它没有给我访问选择对象,所以我可以迭代选定的对象,并为他们分配新选择的颜色。

使用MultiBinding也是没有用的,因为ConvertBack()value参数是单个对象,不能让我访问选择对象。一个想法是使用ConverterParameter提供选择对象,但是ConverterParameter是不可绑定的。

另一个想法(hack?)是保持一个类级变量指向选择对象并在Convert()函数中分配(通过在MultiBinding中传递选择对象),然后在ConvertBack()中使用该变量,但我不知道它有多安全,以及Convert()ConvertBack()是否总是按顺序调用。

我该怎么做呢?

OK。这比我想象的要容易。为了将来的读者,我只是在我的VM中添加了一个Brush类型的属性(称为SelectionBrush),它的getter将返回第一个选定对象的Brush,它的setter将遍历整个选择并将Brush分配给适当的对象(通过检查它们的类型)。不需要更多的转换器!

相关内容

  • 没有找到相关文章

最新更新