当ItemSource绑定到枚举时,在WPF组合框上设置项目

时间:2014-08-26 11:21:41

标签: c# wpf xaml combobox enums

我无法使用组合框源指定的枚举值来分配组合框项目。

XAML

<ComboBox HorizontalAlignment="Left"
                x:Name="cmbName"
                VerticalAlignment="Top"
                Width="120" Margin="79,48,0,0">
    <ComboBox.ItemsSource>
        <CompositeCollection>
            <ListBoxItem Content="Please Select"/>
            <CollectionContainer Collection="{Binding Source={StaticResource Enum}}" />
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

试图将组合框设置为枚举

中的项目的C#
// The problem, the assignment doesn't work.

cmbName.SelectedItem =  Enum.value;

我只能使用组合框SelectedIndex

设置项目
cmbName.SelectedIndex = 2; 

但是这是对索引进行硬编码所以如果枚举改变了,那么值也会改变。

那么如何通过枚举值设置组合框呢?

由于

2 个答案:

答案 0 :(得分:1)

很难说出你的问题是什么,因为你还没有完全记录你的情景。因此,我所能做的就是告诉你如何做你想做的事。由于我更喜欢​​使用属性,因此我不会在此示例中使用任何Resource,但我确信您仍然可以将此解决方案与您的问题联系起来

所以,首先我们有一个测试enum和一些属性以及一些初始化:

public enum TestEnum
{
    None, One, Two, Three
}

private TestEnum enumInstance = TestEnum.None;
public TestEnum EnumInstance
{
    get { return enumInstance; }
    set { enumInstance = value; NotifyPropertyChanged("EnumInstance"); }
}

private ObservableCollection<TestEnum> enumCollection = new ObservableCollection<TestEnum>() { TestEnum.None, TestEnum.One, TestEnum.Two, TestEnum.Three };
public ObservableCollection<TestEnum> EnumCollection
{
    get { return enumCollection; }
    set { enumCollection = value; NotifyPropertyChanged("EnumCollection"); }
}

...

EnumCollection.Add(TestEnum.One);
EnumCollection.Add(TestEnum.Two);
EnumCollection.Add(TestEnum.Three);
EnumInstance = TestEnum.Three;

然后我们有ComboBox

<ComboBox Name="ComboBox" ItemsSource="{Binding EnumCollection}" 
    SelectedItem="{Binding EnumInstance}" />

如果您运行该应用程序,那么此时所选的ComboBoxItem应为Three。因为ComboBox.SelectedItem是绑定到EnumInstance属性的数据,所以设置为......:

EnumInstance = TestEnum.Two;

...大致相同:

ComboBox.SelectedItem = TestEnum.Two;

这两个都会选择Two中的ComboBox值。但请注意这个例子:

EnumInstance = TestEnum.None;

EnumInstanceComboBox.SelectedItem属性设置为TestEnum.None对UI没有影响,因为数据绑定集合中没有TestEnum.None值。

答案 1 :(得分:0)

我很抱歉我的答案足够描述,但是,我没有像Sheridan所描述的那样将我的枚举设置为属性的原因是我的组合中需要一个额外的字符串值,你可以看到&#34;请选择&#34;不幸的是,我不能把它放在枚举中。

但如果你想这样做,Sheridan的方法和逻辑就是你的选择。

但是,对于我的问题,我只是使用了

ComboBox.SelectedValue = Enum.Value.ToString();

谢谢