在我的 Windows 应用商店应用程序中,我有一个填充了 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();
}
连接到 ExpandoObject 上的 PropertyChanged 事件确认它为所有对象触发。新属性附加到对象并且值正确,但是 ListView 中的项目没有完全更新。
该列表包含 14 个对象。如果我使用常规类型的对象而不是 ExpandoObjects 并使用图像属性的相同异步设置,则 14 个对象中的一些会在视图中更新(当前不可见的对象)。如果我在类中实现 INotifyPropertyChanged,则所有 14 个都会更新。使用 ExpandoObjects 我得到了与没有 INPC 的类型对象的确切行为:更新当前不可见的项目。
因此,PropertyChanged 似乎不适用于 ExpandoObject 和数据绑定。
它在 WPF 中按预期工作,但在商店应用程序中没有。查看比较: https ://sites.google.com/site/moramatte/ExpandoComparison.zip?attredirects=0&d=1