我正在寻找的答案是......
<dataFormToolkit:DataField Label="Business Type:">
<ComboBox x:Name="BusinessType" SelectedItem="{Binding BusinessType, Mode=TwoWay}" >
<ComboBox.Items>
<sys:String>Land</sys:String>
<sys:String>Maritime</sys:String>
</ComboBox.Items>
</ComboBox>
</dataFormToolkit:DataField>
以下是article
的链接我有一个c#silverlight业务应用程序,它使用ado.net实体框架和域服务类绑定到我的sql server数据库,并将数据从/ persist数据提取到我的数据库。我一直在使用dataformtoolkit命名空间来布局可以编辑/显示数据的文本框,使用TwoWay绑定模式以允许读/写功能。
在某些字段中,我想使用组合框而不是文本框,以便为我的应用程序添加更好的用户体验。我通过网络阅读得到的印象是,这并不容易。 我当前的文本框代码如下所示:
<dataFormToolkit:DataField>
<TextBox Text="{Binding BusinessType, Mode=TwoWay}" />
</dataFormToolkit:DataField>
我尝试类似的事情如下但不正确:
<ComboBox>
<ComboBox.Items>
<ComboBoxItem Content="Maritime" IsSelected="{Binding BusinessType, Mode=TwoWay}" />
<ComboBoxItem Content="Land" IsSelected="{Binding BusinessType, Mode=TwoWay}" />
</ComboBox.Items>
</ComboBox>
NB /我希望组合框由列表或枚举等填充(最好是列表)。组合框的内容应该与数据库无关,只是当用户点击提交时,组合框中的选择会被持久化回数据库。如果是这种情况,组合框可以从数据库中读取并显示已经进行的特定选择也很重要。
****编辑:
当前设置的dataform绑定到datagrid,可编辑的businesstype字段作为文本框(我想用一个有两个可选项的组合框替换此文本框)。
<!--DataForm Declaration-->
<dataFormToolkit:DataForm x:Name="dataForm1" Height="410" Width="331"
VerticalAlignment="Top"
Header="Job Details"
CurrentItem="{Binding SelectedItem, ElementName=dataGrid1}"
HorizontalAlignment="Left" >
<dataFormToolkit:DataForm.EditTemplate>
<DataTemplate>
<StackPanel>
<dataFormToolkit:DataField>
<TextBox Text="{Binding BusinessType, Mode=TwoWay}" />
</dataFormToolkit:DataField>
</StackPanel>
</DataTemplate>
</dataFormToolkit:DataForm.EditTemplate>
</dataFormToolkit:DataForm>
那么我如何操作此代码以使用组合框而不是文本框?
非常感谢任何帮助。
答案 0 :(得分:3)
您应该设置绑定以使用ComboBox的SelectedValue属性。
<ComboBox SelectedValue="{Binding BusinessType, Mode=TwoWay}">...</ComboBox>
这个问题是ListBox和ComboBox将对SelectedItem中的对象使用Equals()方法,因此如果类型不匹配,则ComboBox不会将相应的项目设置为选中。因此,BusinessType将需要是一个字符串,因为您正在使用ComboBoxItem并指定字符串内容。
如果绑定了ComboBox的ItemsSource,那么你将使用SelectedItem,它实际上也是一个实体类型,在这种情况下,你有更多的灵活性/控制力等于什么。