У меня здесь серьезная психическая блокада, и я нуждаюсь в некоторой помощи. Я использую приложение Windows Phone Databound в качестве отправной точки моего проекта и довольно доволен тем, как взаимодействуют модель, модель представления и представление.
Моя проблема заключается в том, что данные, используемые в примере, создаются во время выполнения и добавляются в объект ObservableCollection. Насколько я понимаю, создание новых объектов ItemViewModel и последующее добавление их в ObservableCollection запускает эквивалент событий NotifyPropertyChanged, которые обеспечивают обновление всех привязок в представлении. Если мое объяснение неверно, я бы приветствовал любые мысли.
Теперь генерация данных во время выполнения бесполезна в большинстве реальных примеров, и поэтому мне нужно сериализовать данные в изолированное хранилище. Это я сделал и могу успешно сохранить и загрузить свой объект ObservableCollection.
Моя проблема возникает, когда я загружаю данные из IsolatedStorage, а затем назначаю возвращенную коллекцию ObservableCollection объекту Items в модели представления.
public void LoadData()
{
App.Measurements = Serialization.Read<measurements>(App.MEASUREMENTS);
this.IsDataLoaded = true;
}
App.MEASUREMENTS в простой глобальной переменной, которая содержит имя файла для использования в IsolatedStorage.
Приведенный выше код извлекает данные и присваивает их коллекции Items ObservableCollection, но пользовательский интерфейс не обновляется. Если я заменю код выше на:
public void LoadData()
{
foreach (measurement m in App.Measurements.WeightMeasurements)
{
this.Items.Add(m);
}
this.IsDataLoaded = true;
}
, итерация по извлеченной коллекции и добавление новой коллекции ItemViewModel в коллекцию Items, после чего все обновляется в пользовательском интерфейсе правильно.
Мой xaml имеет правильные привязки, и DataContext также настроен правильно.
Я пробовал разные способы, чтобы решить эту проблему, но я не могу поверить, что единственный способ - это перебрать всю загруженную коллекцию, добавив ее в коллекции Items, только некоторые события будут запущены!
Любые мысли приветствуются.
Джейсон.