【问题标题】:Bind ListBox (or Telerik RadListPicker) to Enum将 ListBox(或 Telerik RadListPicker)绑定到 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,但如果有,这是 stackoverflow.com/questions/6145888/… 的欺骗
  • @JeffCren:你是绑定单个枚举还是 UnitOfMeasure 枚举列表?
  • 我正在尝试将枚举列表绑定到下拉列表。
  • @Will:WP7 没有 ObjectDataSource。我在发布我的问题之前看到了这个问题。

标签: telerik mvvm-light windows-phone-7


【解决方案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:您知道您必须将枚举的不同值添加到集合中,对吗?它不像集合填充自己。
    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2013-05-03
    • 2019-12-05
    相关资源
    最近更新 更多