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

C# 当ItemSource绑定到枚举时,在WPF组合框上设置项,c#,wpf,xaml,combobox,enums,C#,Wpf,Xaml,Combobox,Enums,我在使用combobox源分配给的枚举值分配combobox项时遇到问题 XAML <ComboBox HorizontalAlignment="Left" x:Name="cmbName" VerticalAlignment="Top" Width="120" Margin="79,48,0,0"> <ComboBox.ItemsSource> <

我在使用combobox源分配给的枚举值分配combobox项时遇到问题

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>
我只能使用组合框SelectedIndex设置项目

cmbName.SelectedIndex = 2; 
但这是对索引进行硬编码,因此如果枚举发生更改,值也会发生更改

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


谢谢

很难判断您的问题是什么,因为您还没有完全记录您的场景。因此,我所能做的就是告诉你如何做你想做的事。由于我更喜欢使用属性,因此在本例中我不会使用任何
资源
,但我相信您仍然能够将此解决方案与您的问题联系起来

首先,我们有一个test
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"); }
}
然后我们有一个组合框:

<ComboBox Name="ComboBox" ItemsSource="{Binding EnumCollection}" 
    SelectedItem="{Binding EnumInstance}" />
。。。与以下内容大致相同:

ComboBox.SelectedItem = TestEnum.Two;
这两个选项都会选择组合框中的
两个
值。但是,请注意以下示例:

EnumInstance = TestEnum.None;

EnumInstance
组合框设置为
TestEnum。SelectedItem
属性设置为
TestEnum。由于数据绑定集合中没有
TestEnum.None
值,因此在UI中无任何影响。

我很抱歉,我的回答说明性很强,我没有像Sheridan在下面描述的那样将枚举设置为属性的原因是,我需要在我的组合中使用一个额外的字符串值,您可以看到它是“请选择”,不幸的是,我无法将其放入枚举中

但如果你想这样做,谢里登的方法和逻辑是最好的选择

然而,对于我的问题,我只是使用

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

谢谢

请发布
StaticResource Enum
的定义。我怀疑
StaticResource Enum
是一个字符串枚举。还想知道为什么在组合框中使用
ListBoxItem
而不是
ComboBoxItem
。这不是问题的原因,但ListBoxItem最终将被包装在ComboBoxItem中,因此不值得。感谢@pushpraj发现ListBoxItem。将其更改为ComboBoxItem。很快,您如何在注释框中将单词作为代码突出显示,就像您所做的那样?@user3428422将单词包装为“标记”,以便突出显示,其余部分也将这样做,有关更多格式选项,请参阅。完全同意这一点,因此我对它投了赞成票,但是,这是我的错,没有包括它,我无法使用上述属性。我建议程序员使用这种方法。因此
StaticResource Enum
是Enum的字符串值的集合。@pushpraj我不这么认为,因为我不使用转换器返回字符串。我将资源设置为mate,请使用此附加信息编辑第一篇文章或提出另一个问题。
ComboBox.SelectedItem = TestEnum.Two;
EnumInstance = TestEnum.None;
ComboBox.SelectedValue = Enum.Value.ToString();