使用RIA服务在Silverlight中进行数据绑定

时间:2011-02-18 00:27:09

标签: c# data-binding silverlight-4.0 ria

我正在尝试在组合框中显示表的内容。

我正在使用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,因为我希望能够在列表中添加和删除数据。

最好的问候。

4 个答案:

答案 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

或查看此链接

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/af225aa0-1cf4-40dd-ac3e-e7a19edaef00

答案 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();
}
相关问题