我到处都查了这个问题却找不到答案。我有一个枚举值的组合框,它应该从类属性中获取其初始值。请记住,它不是数据绑定到属性。当我使用当前所选项目设置类属性时,没有问题,但是当我尝试设置初始值时,组合框只是空白。
我已经对它进行了调试,似乎正确设置了SelectedItem,但它并没有直观地更新当前项目。这是我填充组合框的代码:
foreach(Gender gender in Enum.GetValues(typeof(Gender)))
{
genderComboBox.Items.Add(gender);
}
我用它设置了它:
genderComboBox.SelectedItem = person.Gender;
我之前也尝试过这样做:
genderComboBox.DataSource = Enum.GetValues(typeof(Gender));
没有任何作用。我也尝试将enum属性转换为int并使用它来设置SelectedIndex。如果我添加断点并检查值,一切看起来都应该有效,但事实并非如此。我真的很困惑。
答案 0 :(得分:1)
我好像已经弄清楚了。
SelectedItem
的默认值为Gender.Male
,与person.Gender
的默认值相同。由于SelectedItem
已经等于Gender.Male
,因此它无法直观地更新控件并将其留空。当我将SelectedItem
设置为null
,然后将其设置为初始值时,它突然起作用。
答案 1 :(得分:0)
我使用您的代码进行了测试,但有一点不同。它运行没有问题。我没有从人的财产Gender
中获取值,而是直接分配Gender
常量:
genderComboBox.SelectedItem = Gender.Male;
这让我假设属性person.Gender
没有有效的Gender
值。将断点设置为genderComboBox.SelectedItem = person.Gender;
行并观察person.Gender
的值。这是对的吗?
注意:如果你这样声明Gender
:
enum Gender
{
Male = 1
Female =2
}
...然后Gender
0
的默认值不是有效的Gender
值。向None = 0
添加值enum
或将person
中的属性初始化为有效值。