【问题标题】:C# Silverlight - Combobox with TwoWay Binding?C# Silverlight - 具有双向绑定的组合框?
【发布时间】:2009-09-22 16:32:21
【问题描述】:

编辑:

我一直在寻找的答案是......

<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 数据库并将数据从/持久化到我的数据库中。我一直在使用 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 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>

那么我该如何操作这段代码来使用组合框而不是文本框呢?

我们将不胜感激。

【问题讨论】:

    标签: c# silverlight combobox


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 嗨,对不起,我对此感到很困惑。我已经添加了我当前使用的完整代码块。您是说我需要在后面的代码中创建一个绑定并将组合框 itemsource 属性设置为此绑定吗?还是我错过了什么?
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多