【问题标题】:ComboBox SelectedItem displayComboBox SelectedItem 显示
【发布时间】:2011-01-14 06:28:26
【问题描述】:

下面的绑定获取并设置选定的项目。它还可以正确显示项目,在这种情况下,这意味着显示部门的名称。

但是,它不显示所选部门的名称,而是显示所选部门的 ToString()。

如何解决此问题,使所选项目仅显示部门名称?

干杯,
浆果

<ComboBox 
    Style="{StaticResource ComboBoxStyle}" 
    ItemContainerStyle="{StaticResource ComboBoxItemStyle}"

    ItemsSource="{Binding Path=Departments}" 
    SelectedItem="{Binding Path=Department, Mode=TwoWay}" 
    IsSynchronizedWithCurrentItem="True" 
    DisplayMemberPath="Name"
/>

【问题讨论】:

  • "不显示所选部门的名称,而是显示所选部门的 ToString()。" 你能解释一下吗
  • 请将您的解决方案作为正确答案发布并接受它,答案不属于问题,因此看起来需要从外部获得答案,但事实并非如此。
  • @H.B. - 这是一个“修复”,如果有点缺乏“正确”的答案。我现在非常喜欢使用 DataTemplate,所以放弃了 DisplayMemberPath 样式。但它应该有效,不是吗?你能看出它没有的任何原因吗?干杯
  • 我不知道,它通常按预期对我有用,您的上下文中可能存在一些错误。

标签: wpf data-binding combobox


【解决方案1】:

这是因为 .Net 框架在每个可观察的集合项上调用 ToString() 方法。要解决此问题,您可以像这样在模型中覆盖 ToString() 方法:

public override string ToString()
{
    return this.Name;
}

【讨论】:

    【解决方案2】:

    我可以通过将 DisplayMemberPath 更改为 DataTemplate 来解决问题,如下所示。

    虽然我不确定为什么 DisplayMemberPath 在这里不起作用,但我不得不假设我的代码中的某个地方存在一些其他错误。作为一个老问题,代码已经改变,不值得重新创建。

    顺便说一句,我现在经常使用 DataTemplates,即使对于像这样的简单情况也是如此。

    干杯,
    浆果

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 2020-01-24
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多