我正在尝试选择一个ComboBox项来设置数据库中保存的值。
在数据库中,它保存为“I”或“D”,转换器返回“Direct”或“Indirect”。
ComboBox有两个带有“直接”和“间接”值的ComboBoxItem。
以下是我认为可行的代码:
<ComboBox Name="cbMode"
SelectedValue="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" >
<ComboBoxItem Content="Direct" />
<ComboBoxItem Content="Indirect" />
</ComboBox>
我知道它正在返回“间接”,但未被选中。
当我尝试更改组合中的所选项时,它不起作用,因为它无法从ComboBoxItem转换为String,所以我支持这是两个方面的问题。
我该怎么试?我必须使用数字转换器制作SelectedIndex吗?
提前致谢。
答案 0 :(得分:0)
创建一个表示列中“thing”的对象(是Mode?),然后使用上面博客文章中的公式绑定到它。 Mode类将有一个表示类型的属性。
如果Context.mode的值为null,我遇到了绑定到常规ComboBox控件的问题。它打破了绑定。像Tereik这样的第三部分组合框可以解决这个问题。运气好的话,SL5将会解决此问题。
答案 1 :(得分:0)
我通常会在我的数据库访问层中尝试拦截这样的问题。数据库正在限制App Dev方面。当您获取数据时,我会从I / D转换为间接/直接。当你设置数据时,我只是反过来。允许您根据有意义的代码编写应用程序代码。
有些人称这种应用程序为中心编码,这让我的生活变得更加轻松。
答案 2 :(得分:0)
最后我使用了一个不太酷的解决方案(但比其他选项更好)。
我以这种方式绑定所选项目:
<ComboBox Name="cbMode"
SelectedIndex="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" >
<ComboBoxItem Content="Direct" />
<ComboBoxItem Content="Indirect" />
</ComboBox>
如果它是D,则将转换器更改为0,如果是I,则将其更改为1.
如果您找到更好的解决方案,请告诉我们; - )。