开发者

Databinding in Silverlight with RIA Services

I'm trying to display the content of a table in a combobox.

I'm using the MVVM pattern and in my viewmodel class if I write this it works:

private IEnumerable<EventType> _eventTypes;

public ManageProfileModel()
        {
            _referenceData = new ReferenceDataContext();

            _referenceData.Load(_referenceData.GetEventTypesQuery(), false);

            _eventTypes = _referenceData.EventTypes;
        }

Like this the combobox is displaying the data.

However, I want the _eventTypes to be a List:

private List<EventType&g开发者_如何学Got; _eventTypes;

But if I write this:

public ManageProfileModel()
        {
            _referenceData = new ReferenceDataContext();

            _referenceData.Load(_referenceData.GetEventTypesQuery(), false);

            _eventTypes = _referenceData.EventTypes.ToList();
        }

then the combobox is empty. What is wrong with that?

I want to use a List, because I want to be able to add and remove data in the list.

Best regards.


If I remember correctly, you can not convert IEnumerable to IList directly. It is little tricky. I would use of the options from the following link. I have it in bookmark since I ran into the same problem. http://devlicio.us/blogs/derik_whittaker/archive/2008/03/28/simple-way-to-convert-ienumerable-lt-entity-gt-to-list-lt-ientity-gt.aspx

or look at this link

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


DomainContext.Load is asynchronous, so in your second example you're creating a list that's most likely empty because the EntitySet hasn't finished loading yet. Use the code posted by StackOverflowException to defer creating the list until the EntitySet has been populated and it should work.


just a shot straight from the head...

did you try to add something like propertychanged event for your list? so it could be that the data came async and the property was not informed about the change...

like I said ...

 private List<EventType> _eventTypes;
 public List<EventType> EventTypes
    {
        get { return _eventTypes; }
        set
        {
            _eventTypes = value;
            RaisePropertyChanged("EventTypes");
        }
    }

and take also a look at ObservableCollections...

Like I said just a shot...

Hope this helps


I don't have much MVVM exposure but with silverlight + RIA, I usually do something like this.

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();
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜