将 ListBox(或 Telerik RadListPicker)绑定到 Enum

Posted

技术标签:

【中文标题】将 ListBox(或 Telerik RadListPicker)绑定到 Enum【英文标题】:Bind ListBox (or Telerik RadListPicker) to Enum 【发布时间】:2012-01-26 10:14:23 【问题描述】:

我有一个枚举:

public enum UnitOfMeasure

    Meters,
    Kilometers,
    Yards,
    Miles,
    Time

我想将它绑定到 ListBox(实际上是 Telerik RadListPicker,但它的工作原理相同):

<telerikInput:RadListPicker
    Header="Measure work in:"
    ItemsSource="Binding WorkUnitOfMeasure"
    HeaderStyle="StaticResource HeaderStyle"
    x:Name="workUnitsListPicker"
    Margin="18">
</telerikInput:RadListPicker>

我的视图模型:

/// <summary>
/// The <see cref="WorkUnitOfMeasure" /> property's name.
/// </summary>
public const string WorkUnitOfMeasurePropertyName = "WorkUnitOfMeasure";

private ObservableCollection<Enum<UnitOfMeasure>> _workUnitOfMeasure;
/// <summary>
/// Gets the WorkUnitOfMeasure property.
/// Changes to that property's value raise the PropertyChanged event. 
/// This property's value is broadcasted by the Messenger's default instance when it changes.
/// </summary>
public ObservableCollection<Enum<UnitOfMeasure>> WorkUnitOfMeasure

    get
    
        return _workUnitOfMeasure;
    
    set
    
        if (_workUnitOfMeasure == value)
        
            return;
        
        var oldValue = _workUnitOfMeasure;
        _workUnitOfMeasure = value;
         RaisePropertyChanged(WorkUnitOfMeasurePropertyName);
    

在我的构造函数中,我尝试了类似这样的变体:

WorkUnitOfMeasure = new ObservableCollection<Enum<UnitOfMeasure>>();

我似乎无法让列表框绑定到 Enum。我知道我遗漏了一些简单的东西,但我想不通。

【问题讨论】:

到底是Enum&lt;UnitOfMeasure&gt;?不确定 WP7 是否有 ObjectDataSource,但如果有,这是 ***.com/questions/6145888/… 的欺骗 @JeffCren:你是绑定单个枚举还是 UnitOfMeasure 枚举列表? 我正在尝试将枚举列表绑定到下拉列表。 @Will:WP7 没有 ObjectDataSource。我在发布我的问题之前看到了这个问题。 【参考方案1】:

如果您将单个枚举项绑定到列表框:

以下代码可能对您有所帮助:

 List<string> newList = new List<string>();
        for (int i = 0; i <= (int)UnitOfMeasure.Time; i++)
            newList.Add(Enum.GetName(typeof(UnitOfMeasure), i));
        SampleList.ItemsSource = newList;

【讨论】:

【参考方案2】:

我认为应该是一个

ObservableCollection<UnitOfMeasure>

不是

ObservableCollection<Enum<UnitOfMeasure>

如果不是,您看到了什么错误?

【讨论】:

我没有收到错误,但列表框没有绑定 - 它是空的。 我刚刚注意到在视图模型构造函数中,当我调用 WorkUnitOfMeasure = new ObservableCollection(); WorkUnitOfMeasure 的计数为 0,因此未正确初始化。实际上可能不是绑定,而是初始化。 @JeffCren:您知道您必须将枚举的不同值添加到集合中,对吗?它不像集合填充自己。

以上是关于将 ListBox(或 Telerik RadListPicker)绑定到 Enum的主要内容,如果未能解决你的问题,请参考以下文章

如何检测是不是将项目添加到 ListBox(或 CheckedListBox)控件

如何将 Telerik 网格列绑定到作为列表的子数据对象?

将 ListBox 与多个字段绑定

将 ListBox 项保存到文件

Devexpress 或 Telerik Controls 比较 [关闭]

Telerik 通过 s-s-rS 报告?