【问题标题】:Why SelectedItem property does not work with ComboBoxItem strings?为什么 SelectedItem 属性不适用于 ComboBoxItem 字符串?
【发布时间】:2011-04-28 09:01:18
【问题描述】:

我想通过它们的字符串值选择组合框项目,但我遇到了问题。 一个简单的测试:

<ComboBox SelectedItem="text1" ItemsSource="{Binding MyListOfStrings}">
</ComboBox>

MyListOfStrings 有包含字符串“text1”、“text2”、“text3”的列表。这样就可以正常工作 - text1 被选中。

但是下面的方法不行:

<ComboBox SelectedItem="text1">
 <ComboBoxItem>text1</ComboBoxItem>
 <ComboBoxItem>text2</ComboBoxItem>
 <ComboBoxItem>text3</ComboBoxItem>
</ComboBox>

它有什么问题?如果我在 XAML 中定义项目,为什么 WPF 找不到 text1?

附:实际上 SelectedItem 使用数据绑定,我只是简化了示例。

【问题讨论】:

    标签: combobox wpf-controls selecteditem


    【解决方案1】:

    您可以使用Selector.IsSelected="True"ComboItem 设置所选项目

    <ComboBox>
     <ComboBoxItem Selector.IsSelected="True">text1</ComboBoxItem>
     <ComboBoxItem>text2</ComboBoxItem>
     <ComboBoxItem>text3</ComboBoxItem>
    </ComboBox>
    

    编辑:

    如果您使用的是 Binding,请创建一个 ComboBoxItem 属性

     public ComboBoxItem MyProperty
        {
            get
            {
                ComboBoxItem ci = new ComboBoxItem();
                ci.Content = "text1";
                return ci;
            }
        }
    

    并绑定

    SelectedItem="{Binding Path=MyProperty}"
    

    【讨论】:

    • 会很好,但是SelectedItem实际上是使用数据绑定的,所以设计时不知道选择了哪个item。
    • 那么你应该将 ComboBoxItem 绑定到 SelectedItem
    【解决方案2】:

    我猜它不起作用,因为 ComboBoxItem 不是字符串,并且没有从字符串到 ComboBoxItem 的转换器。 但是 ComboBoxItem 提供了一个您可以使用的“IsSelected”属性。

    【讨论】:

    • hmm... 实际上 SelectedItem 正在使用绑定,因此很难绑定每个组合框项的 IsSelected 属性。但也许我可以使用一些自定义转换器?有什么方法可以创建将 SelectedItem 字符串转换为 ComboBoxItem 并返回的转换器?
    猜你喜欢
    • 2019-03-06
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多