У меня серьезный психический блок, и мне нужна помощь. Я использую приложение с привязкой к данным для Windows Phone в качестве отправной точки моего проекта и вполне доволен тем, как взаимодействуют модель, модель представления и представление.
Моя проблема заключается в том, что данные, используемые в примере, создаются во время выполнения и добавляются в объект 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, только некоторые события сработают!
Приветствуются любые мысли.
Джейсон.