【发布时间】:2012-11-17 05:23:19
【问题描述】:
在我的 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
【问题讨论】:
-
PropertyChanged 在 ExpandoObject 中工作,参见简单示例 here。问题一定是别的。请提供一个小而完整的示例来重现此行为。
-
它在 WPF 中按预期工作,但在商店应用程序中不工作。看看我的简单比较:sites.google.com/site/moramatte/…
-
我提交了一个 Connect 错误:connect.microsoft.com/VisualStudio/feedback/details/836252/…
标签: .net dynamic binding expandoobject