ComboBox - 按枚举名称设置所选项目

时间:2014-04-06 13:22:59

标签: c# winforms combobox enums

我用这样的Enum值初始化我的CB:

private void initPrioritys()
{
    m_PriorityComboBox.DataSource = Enum.GetNames(typeof(MPriority)).ToArray();
}

之后我想更新所选项目:

m_PriorityComboBox.SelectedItem = (MPriority)i_Data.Priority;

这是我的枚举:

public enum MPriority
{
    Critical,
    High,
    Important,
    Medium
}

问题在于,无论i_Data.Priority具有什么值,所选项都会保留第一个索引。

4 个答案:

答案 0 :(得分:2)

您应该将其更改为m_PriorityComboBox.SelectedItem = Enum.GetName(typeof(MPriority), (MPriority)i_Data.Priority);

由于您的数据源是一个字符串数组 - 因为Enum.GetNames(typeof(MPriority)).ToArray(); - 而不是枚举,您需要将每个项目作为字符串引用。

答案 1 :(得分:2)

您将DataSource设置为string数组,因此SelectedItem也需要为字符串:

m_PriorityComboBox.SelectedItem = i_Data.Priority.ToString();

或将DataSource设置为枚举值

m_PriorityComboBox.DataSource = Enum.GetValues(typeof(MPriority));

然后SelectedItem将是MPriority类型和

m_PriorityComboBox.SelectedItem = (MPriority)i_Data.Priority;

将起作用

答案 2 :(得分:0)

我建议将对象用作DataSource NameValue属性。

m_PriorityComboBox.ValueMember = "Value";
m_PriorityComboBox.DisplayMember = "Name";
m_PriorityComboBox.DataSource =
                Enum.GetNames(typeof(MPriority))
                    .Zip(
                          Enum.GetValues(typeof(MPriority)).Cast<MPriority>(),
                          (s, i) => new {Name = s, Value = i }
                        )
                    .ToList();

然后您可以轻松设置SelectedValue以实现目标。

m_PriorityComboBox.SelectedValue = i_Data.Priority;

答案 3 :(得分:0)

也许可以帮助设置SelectedValue而不是SelectedItem:

<ComboBox ItemsSource="{Binding Source={StaticResource dataFromEnum}}" SelectedValue="{Binding Source={x:Static props:UserSettings.Instance}, Path=DefaultCalcMethod}">

以这种方式获取枚举项源的地方:

<ResourceDictionary>
    <ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type TypeName="calc:Method"/>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
</ResourceDictionary>