Silverlight 4中的ComboBox转换器

时间:2011-05-05 16:37:34

标签: c# .net silverlight mvvm

我正在尝试选择一个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吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

http://johnpapa.net/binding-to-silverlight-combobox-and-using-selectedvalue-selectedvaluepath-and-displaymemberpath

创建一个表示列中“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.

如果您找到更好的解决方案,请告诉我们; - )。