C#Silverlight - 带有TwoWay绑定的Combobox?

时间:2009-09-22 16:32:21

标签: c# silverlight combobox

编辑:

我正在寻找的答案是......

<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>

那么我如何操作此代码以使用组合框而不是文本框?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您应该设置绑定以使用ComboBox的SelectedValue属性。

<ComboBox SelectedValue="{Binding BusinessType, Mode=TwoWay}">...</ComboBox>

这个问题是ListBox和ComboBox将对SelectedItem中的对象使用Equals()方法,因此如果类型不匹配,则ComboBox不会将相应的项目设置为选中。因此,BusinessType将需要是一个字符串,因为您正在使用ComboBoxItem并指定字符串内容。

如果绑定了ComboBox的ItemsSource,那么你将使用SelectedItem,它实际上也是一个实体类型,在这种情况下,你有更多的灵活性/控制力等于什么。