2011-05-05 133 views
3

我试图选择一个组合框项来设置数据库中保存的值。转换为Silverlight中的组合框4

在数据库中它保存为“I”或“D”,转换器返回“直接”或“间接”。

ComboBox具有两个带有“直接”和“间接”值的ComboBoxItems。

这是我认为它会工作代码:

<ComboBox Name="cbMode" 
SelectedValue="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" > 
     <ComboBoxItem Content="Direct" /> 
     <ComboBoxItem Content="Indirect" /> 
</ComboBox> 

我知道它返回“间接”,但它没有被选中。

当我尝试更改组合中的选定项目时,它不起作用,因为它无法从ComboBoxItem转换为字符串,所以我支持这两个方法都是问题。

我该如何尝试?我必须使用数字转换器创建SelectedIndex吗?

在此先感谢。

回答

0

最后我用了一个不太酷的解决方案(但比其他选项更好)。

我这样绑定所选项目:

<ComboBox Name="cbMode" 
SelectedIndex="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" > 
     <ComboBoxItem Content="Direct" /> 
     <ComboBoxItem Content="Indirect" /> 
</ComboBox> 

而只是改变了转换器返回0,如果它是一个d和1,如果如果你找到一个更好的解决方案,这是一个一

请告诉我 ;-)。

+0

您在这里遇到的问题是您的用户界面完全是静态的。如果你需要能够添加第三个状态到“模式”会怎么样?我建议至少在您的虚拟机中添加一个Key/Value对的ObservableCollection,并按照John Pappa博客链接中显示的方式将ItemsSource绑定到该对象。那么你不需要一个转换器,如果你需要进一步将它从VM中分离出来以便更好的重用,你的ObservableCollection可以被移动到一个PickListProvider类型的对象。 – 2011-06-20 20:07:52

0

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

创建一个代表在列中的“物”(是模式?),然后用公式上面的博客文章绑定到它的对象。 Mode类将具有表示类型的属性。

如果Context.mode的值为null,我遇到了绑定到常规ComboBox控件的问题。它打破了绑定。像Tereik的第三部分组合框将解决这个问题。幸运的是SL5会有这个固定的。

+0

Mode是datacontext对象(字符串)中的一个属性。我认为问题是在组合框的项目类型... – zapico 2011-05-06 07:19:19

0

我通常尝试在我的数据库访问层中拦截这样的问题。数据库受到应用程序开发方的限制。当你得到你的数据时,我会从I/D转换为间接/直接。当你设置你的数据时,我只是将其取消。允许您针对有意义的代码编写应用程序。

有些人称之为应用程序中心编码,这让我的生活变得非常容易。

+0

我认为这是不适用于任何情况下(这是我的情况)。无论如何感谢您的回复。 – zapico 2011-05-06 07:17:57