Я борюсь с, казалось бы, небольшим, но довольно болезненным затруднением.У меня есть объект, который выступает в качестве модели представления для элемента управления.
Базовая модель представления разработана для того, чтобы помочь отобразить список объектов группы и связанных с ними событий вне всех доступных событий .В базовой модели данных у меня есть следующие объекты (EF) и соответствующие им отношения:
Group -> GroupEvent <- Event
Модель представления имеет две наблюдаемые коллекции - одну для событий и одну для групп.Коллекция событий представляет все события, доступные для любой группы.Все события загружаются только один раз из службы RIA WCF, и по прибытии данные каждого объекта события копируются в локальный объект, который помещается в коллекцию событий.
В дополнение к свойствам сущности Event объект LocalEvent также определяет логическое свойство IsSelected, которое по умолчанию инициализируется как «false».Это свойство используется в CheckBoxGridColumn с двухсторонней привязкой, поэтому я могу установить состояние флажка как отмеченное или не отмеченное.
Коллекция групп в ViewModel инициализируется аналогичным образом.Я создал объект LocalGroup, который имеет коллекцию LocalGroupEvents.В конструкторе после загрузки событий я загружаю все объекты группы (и связанные с ними события GroupEvents) из службы RIA WCF.Я копирую все свойства каждого объекта Group в объект LocalGroup, устанавливаю его коллекцию LocalGroupEvents и, наконец, помещаю LocalGroup в наблюдаемую коллекцию Groups из ModelView.
Наконец, две коллекции привязываются к своим соответствующим сеткам.Сетка групп отображает только имя группы, а сетка «События» - флажок рядом с каждым событием.Сетка групп имеет обработчик события SelectedItemChanged, и всякий раз, когда это происходит, я беру объект LocalGroup, считываю все его LocalGroupEvents и устанавливаю для свойства «IsSelected» в сетке «События» значение true для каждого события, идентификатор которого соответствует Eventid в LocalGroupEvents.
Ну, этот рабочий процесс работает нормально.100% времени.У меня проблема в том, что, если данные для событий поступают после данных для групп?Я имею в виду, что, поскольку любой вызов службы RIA является асинхронным, потоки не останавливаются, чтобы гарантировать, что данные поступят в правильном порядке.
Что делать, если существует только одна группа, и она загружается очень быстро до событийбыл шанс загрузить?В этом случае, даже если пользователь нажимает на группу, он ничего не увидит и не сможет редактировать выбранную группу.
Как убедиться, что данные поступили в правильном порядке до того, какПользовательский интерфейс привязывается к представлению модели?
Спасибо,
Bleepzter