2011-04-28 82 views
0

我想通过字符串值选择组合框项目,但我有一个问题。 一个简单的测试:为什么SelectedItem属性不适用于ComboBoxItem字符串?

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

MyListOfStrings与字符串 “文本1”, “文本2”, “text3” 中的列表。这种方式工作正常 - text1被选中。

但通过以下方式不起作用:

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

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

P.S.其实SelectedItem使用数据绑定,我只是简化了这个例子。

回答

1

你可以Selector.IsSelected="True"设定所选择的项目为ComboItem

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

编辑:

如果您使用绑定,创造一个ComboBoxItem财产

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

和绑定

SelectedItem="{Binding Path=MyProperty}" 
+0

这会很棒,但SelectedItem实际上使用数据绑定,所以我不知道在设计时选择了哪个项目。 – JustAMartin 2011-04-28 09:13:36

+0

那么你应该将ComboBoxItem绑定到SelectedItem – Binil 2011-04-28 09:34:18

1

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

+0

hmm ...实际上,SelectedItem正在使用绑定,因此很难绑定每个组合框项目的IsSelected属性。但也许我可以使用一些自定义转换器?有没有什么办法可以创建将SelectedItem字符串转换为ComboBoxItem并返回的转换器? – JustAMartin 2011-04-28 09:11:22

相关问题