我用这样的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具有什么值,所选项都会保留第一个索引。
答案 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
Name
和Value
属性。
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>