Привязка данных в Silverlight с помощью RIA Services

Я пытаюсь отобразить содержимое таблицы в поле со списком.

Я использую шаблон MVVM и в своем классе модели представления, если я напишу это, это сработает:

private IEnumerable<EventType> _eventTypes;

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

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

            _eventTypes = _referenceData.EventTypes;
        }

Таким образом, поле со списком отображает данные.

Однако я хочу, чтобы _eventTypes был списком:

private List<EventType> _eventTypes;

Но если я напишу это:

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

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

            _eventTypes = _referenceData.EventTypes.ToList();
        }

то поле со списком пусто. Что не так с этим?

Я хочу использовать список, потому что хочу иметь возможность добавлять и удалять данные в списке.

С наилучшими пожеланиями.


person Daniel    schedule 18.02.2011    source источник


Ответы (4)


Если я правильно помню, вы не можете напрямую преобразовать 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

person Nair    schedule 18.02.2011

DomainContext.Load является асинхронным, поэтому во втором примере вы создаете список, который, скорее всего, пуст, потому что EntitySet еще не закончил загрузку. Используйте код, опубликованный StackOverflowException, чтобы отложить создание списка до тех пор, пока EntitySet не будет заполнен, и он должен работать.

person dradon    schedule 18.02.2011

просто выстрел прямо в голову...

Вы пытались добавить что-то вроде события propertychanged в свой список? поэтому могло случиться так, что данные пришли асинхронно, и свойство не было проинформировано об изменении...

как я сказал ...

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

а также взгляните на ObservableCollections...

Как я уже сказал, просто выстрел ...

Надеюсь это поможет

person silverfighter    schedule 18.02.2011

У меня не так много воздействия 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();
}
person Bala R    schedule 18.02.2011