【问题标题】:WPF combobox is empty when binding enum绑定枚举时WPF组合框为空
【发布时间】:2019-05-22 12:49:52
【问题描述】:

我正在尝试将枚举的值绑定到组合框,但组合框仍然为空,没有可供选择的选项。

这是组合框 xaml 定义:

<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding Path=SkillItemSource}" SelectedItem="{Binding Path=neededSkill, Mode=TwoWay}" SelectedIndex="0" Margin="5" MinWidth="100"></ComboBox>

这是在窗口的cs中定义的项目来源和选定项目:

public Skill neededSkill = Skill.FirstSkill;

public string[] SkillItemSource
    {
        get
        {
            return Enum.GetNames(typeof(Skill));
        }
    }

在组合框中显示的值缺少什么?

【问题讨论】:

  • This 可能就是您要找的。​​span>
  • 当 Combobox 的 ItemsSource 类型为 string[] 时,不能设置 SelectedItem 类型为 Skill。

标签: c# wpf combobox


【解决方案1】:

在组合框中显示的值缺少什么?

您需要将ComboBox 或父元素的DataContext 设置为定义SkillItemSource 属性的类的实例。如果属性是在代码隐藏中定义的,您可以将 DataContext 设置为视图本身:this.DataContext = this;

此外,您不能混合类型。如果ItemsSource 绑定到IEnumerable&lt;string&gt;,则SelectedItem 属性应该绑定到string 属性。

另请注意,neededSkill 必须定义为公共属性,您才能绑定到它。

试试这个:

public Skill neededSkill { get; set; } = Skill.FirstSkill;

public IEnumerable<Skill> SkillItemSource { get; } = Enum.GetValues(typeof(Skill)).Cast<Skill>();

【讨论】:

  • 是否需要设置 DataContext,即使它是在同一个窗口的 xaml.cs 中定义的?
  • 是的。如果属性是在代码隐藏中定义的,您可以将 DataContext 设置为视图本身:this.DataContext = this;
猜你喜欢
  • 2018-11-12
  • 2020-02-07
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
相关资源
最近更新 更多