【发布时间】: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