use*_*578 31 .net binding dynamic expandoobject
在我的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();
}
Run Code Online (Sandbox Code Playgroud)
在ExpandoObject上连接到PropertyChanged事件确认它是针对所有对象触发的.新属性附加到对象,值正确,但ListView中的项目未完全更新.
该列表包含14个对象.如果我使用常规类型对象而不是ExpandoObjects并使用相同的图像属性异步设置,则14个对象中的一些将在视图中更新(当前不可见的对象).如果我在类中实现了INotifyPropertyChanged,那么所有14个都会更新.使用ExpandoObjects我得到的确切行为与没有INPC的类型对象一样:更新当前不可见的项目.
所以似乎PropertyChanged不使用ExpandoObject和数据绑定.
它在WPF中按预期工作,但不在Store App中工作.查看比较:https: //sites.google.com/site/moramatte/ExpandoComparison.zip ?attredirects = 0&d = 1
小智 1
他们没有添加绑定动态对象的默认机制,而是添加了新的接口ICustomTypeProvider
。该接口也没有添加到 ExpandoObject 中,但是使用 Expando,您应该能够使用索引器绑定,因为它是IDictionary<string, object>
实现INotifyPropertyChanged
.
<TextBlock Text="{Binding [Foo]}"/>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3099 次 |
最近记录: |