【问题标题】:How can I set the initial SelectedItem for a ComboBox bound to an enum, to a Value of an object containing that enum?如何将绑定到枚举的 ComboBox 的初始 SelectedItem 设置为包含该枚举的对象的值?
【发布时间】:2016-12-14 19:15:58
【问题描述】:

我目前有一个存在于 ListView 中的 ComboBox。该 ComboBox 的 ItemSource 绑定到一个 StaticResource Enum,它使用我想提供给用户的枚举值填充 ComboBox。 ListView 本身绑定到一个 Observable 对象集合,该集合具有与我要呈现的枚举相关联的属性。这大部分都在工作。

ComboBox 正确显示并展示了 Enum 中的值。它甚至开始填充我创建的枚举中的第一项。但是,我试图让它显示 Listview 正在呈现的 Object 的实际 Enum 值,它目前没有这样做。我认为我将 SelectedValue 和 SelectedValuePaths 设置为的内容存在问题,但我无法找出确切的问题。

这是我现在用于 ComboBox 的 XAML。

<DataTemplate>
  <ComboBox ItemSource={Binding Source={StaticResource dataFromStatusesEnum}}
   SelectedValue="{Binding JMessage3, Mode=TwoWay"}"
   SelectedValuePath="Statuses.Status"
  </ComboBox>
</DataTemplate>

这是我正在填充 ListView 绑定到的 ObservableCollection 的类。

public class Entity
{
    public string Name {get; set;}
    public Statuses Status {get; set;}
    Public Entity()
    {
        this.Name = "Test";
        this.Status = Statuses.Disabled;
    }
}

这是我现在将 ComboBox ItemSource 绑定到的枚举。

public enum Statuses
{
    Enabled,
    Disabled,
    Deleted
}

据我了解我创建的 XAML,ListBox 正确绑定到 ItemSource 并显示我期望的信息。

ComboBox 已正确绑定到 Enum,并在 DropDown 中显示为 ComboBox 的选项。

我认为 SelectedValuePath 应该是实体类本身的 Status 属性,并且我认为 SelectedValue 应该是我希望将其设置为的枚举,但显然我的假设是错误的。

编辑:想补充一点,这目前没有使用 MVVM 模式。我最终正在努力但尚未实施的事情。

【问题讨论】:

  • 首先,您的财产被称为Stat,而不是Status
  • 是的,抱歉。这是手工复制的(关于为什么不直接复制粘贴的长篇大论)。

标签: c# wpf data-binding combobox enums


【解决方案1】:

得到这个工作。 SelectedValue 应该已设置为实体的 Status 属性,并且 SelectedValuePath 不必设置为任何内容。我不完全确定为什么,但它正在工作。

【讨论】:

  • 最好设置 SelectedItem 属性。 SelectedValue 旨在与 SelectedValuePath 结合使用。
猜你喜欢
  • 2016-03-25
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2015-07-03
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
相关资源
最近更新 更多