【发布时间】:2014-03-31 09:18:45
【问题描述】:
在我的 ViewModel 中,我有一个模型类 Foo,其中包含一个属性 Bar
class Foo
{
byte Bar { get; set; }
}
我想要在我的视图中将该属性显示为代表该值位的复选框列表。我设法通过使用ItemsControl 和绑定转换器来做到这一点。
<ItemsControl ItemsSource="{Binding Bar, Converter={StaticResource ValueToLed}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Style="{StaticResource LedCheckBox}"
IsChecked="{Binding Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
ToolTip="{Binding Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我的转换器使用BitArray 从该值中获取bool 的数组。我还将每个 bool 值包装在一个包装器类中,以便为该值提供更多属性,例如索引和名称(用于 toollip)。你可以说我在IValueConverter 中为这样的 CheckBox 构建了一个 ViewModel。
这很好用,但在其他方向上却不行。当我更改其中一个位时,我希望我的 ConvertBack 将更新后的值存储在我的 ViewModel/Model 中,但我的 ConvertBack 永远不会被调用。我已经阅读了一些与该主题相关的内容,到目前为止我的结论是,这是不可能的,因为只有在 ItemsSource 本身发生变化而不是其中的项目时才会调用 ConvertBack。那么这是真的吗?
这种方法的唯一(?)替代方法是在我的 ViewModel 中而不是在 IValueConverter 中进行转换,对吧?
【问题讨论】:
-
对不起,我的意思是
byte,实际上是一个无符号字节。
标签: c# wpf mvvm ivalueconverter itemssource