В моем приложении Windows Store у меня есть список, заполненный ExpandoObjects. Связывание данных отлично работает для начальных значений, но не для свойства изображения, которое я устанавливал асинхронно после загрузки файла:
public static async void Set<T>(this ExpandoObject thisObject, string property, Func<Task<T>> setter) {
var expando = thisObject as IDictionary<string, Object>;
if (!expando.ContainsKey(property)) {
expando.Add(property, null);
}
expando[property] = await setter.Invoke();
}
Подключение к событию PropertyChanged в ExpandoObject подтверждает, что он запущен для всех объектов. Новое свойство привязано к объекту, и значение верное, но элементы в ListView не обновляются полностью.
Список содержит 14 объектов. Если я использую обычные типизированные объекты вместо ExpandoObjects и использую тот же параметр async свойства изображения, некоторые из 14 объектов обновляются в представлении (те, которые в настоящее время не видны). Если я реализую INotifyPropertyChanged в классе, все 14 обновляется. Используя ExpandoObjects, я получаю точное поведение, как и с типизированными объектами без INPC: обновляемые элементы не обновляются.
Поэтому кажется, что PropertyChanged не работает с ExpandoObject и привязкой данных.
Он работает как в WPF, но не в App Store. См. Сравнение: https://sites.google.com/site/moramatte/ExpandoComparison.zip?attredirects=0&d=1