Привязка данных в Silverlight с помощью RIA Services - PullRequest
3 голосов
/ 18 февраля 2011

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

Я использую шаблон 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;

Но если я напишу это:1013 * тогда выпадающий список пуст.Что не так с этим?

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

С уважением.

Ответы [ 4 ]

1 голос
/ 18 февраля 2011

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

1 голос
/ 18 февраля 2011

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

0 голосов
/ 18 февраля 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();
}
0 голосов
/ 18 февраля 2011

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

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

как я уже сказал ...

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

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

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

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

...