将 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<UnitOfMeasure>
?不确定 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以上是关于将 ListBox(或 Telerik RadListPicker)绑定到 Enum的主要内容,如果未能解决你的问题,请参考以下文章
如何检测是不是将项目添加到 ListBox(或 CheckedListBox)控件