我正在尝试在组合框中显示表的内容。
我正在使用MVVM模式,并且在我的viewmodel类中,如果我写它有效:
private IEnumerable<EventType> _eventTypes;
public ManageProfileModel()
{
_referenceData = new ReferenceDataContext();
_referenceData.Load(_referenceData.GetEventTypesQuery(), false);
_eventTypes = _referenceData.EventTypes;
}
像这样,组合框显示数据。
但是,我希望_eventTypes是一个List:
private List<EventType> _eventTypes;
但如果我写这个:
public ManageProfileModel()
{
_referenceData = new ReferenceDataContext();
_referenceData.Load(_referenceData.GetEventTypesQuery(), false);
_eventTypes = _referenceData.EventTypes.ToList();
}
然后组合框是空的。这有什么问题?
我想使用List,因为我希望能够在列表中添加和删除数据。
最好的问候。
答案 0 :(得分:1)
如果我没记错的话,你不能直接将IEnumerable转换为IList。这有点棘手。我会使用以下链接中的选项。我在书签中有它,因为我遇到了同样的问题。 http://devlicio.us/blogs/derik_whittaker/archive/2008/03/28/simple-way-to-convert-ienumerable-lt-entity-gt-to-list-lt-ientity-gt.aspx
或查看此链接
答案 1 :(得分:1)
DomainContext.Load
是异步的,因此在您的第二个示例中,您创建的列表很可能为空,因为EntitySet
尚未完成加载。使用StackOverflowException
发布的代码推迟创建列表,直到填充EntitySet
并且它应该有效。
答案 2 :(得分:0)
直接从头部射击......
您是否尝试为列表添加类似propertychanged事件的内容? 所以可能是数据异步并且财产没有被告知变化...
像我说的那样...... private List<EventType> _eventTypes;
public List<EventType> EventTypes
{
get { return _eventTypes; }
set
{
_eventTypes = value;
RaisePropertyChanged("EventTypes");
}
}
并查看ObservableCollections ...
像我说的一样......希望这有帮助
答案 3 :(得分:0)
我没有太多MVVM曝光但是使用silverlight + RIA,我通常会做这样的事情。
private List<EventType> _eventTypes;
public ManageProfileModel()
{
_referenceData = new ReferenceDataContext();
var op = _referenceData.Load(_referenceData.GetEventTypesQuery(), false);
op.Completed += op_Completed;
}
void po_Completed(object sender, EventArgs e)
{
var op = ( InvokeOperation<IEnumerable<EventType>>)sender;
_eventTypes = op.Value.ToList();
}