关于嵌套的 ObservableCollection<T>集合数据源改变不能更新UI问题?
如题!不知道大家有没有碰到这样的问题,这里如果是做集合的增、删嵌套的 ObservableCollection<T>集合数据源,UI是可以更新的,但是如果只是做修改的话,嵌套的 ObservableCollection<T>集合数据源改变了,但不能更新UI。我试过非嵌套的ObservableCollection<T>数据源增、删、修改,数据源都可以即时通知UI.不知道是怎么回事?
Treeview的HierarchicalDataTemplate集合数据绑定源,这里以冷大侠的一篇文章说吧,http://blog.csdn.net/jv9/archive/2009/12/12/4989620.aspx,下面是嵌套的 ObservableCollection<T>的数据集合数据结构:
public class Country { public Country() { Provinces = new ObservableCollection<Province>(); } public string Name { get; set; } public ObservableCollection<Province> Provinces { get; set; } } public class Province { public Province() { Citys = new ObservableCollection<City>(); } public string Name{get;set;} public ObservableCollection<City> Citys { get; set; } } public class City { public City() { } public string Name{get;set;} }
private void button2_Click(object sender, RoutedEventArgs e) { countrys.FirstOrDefault().Provinces.FirstOrDefault().Name = "我故意修改的"; }
private void button1_Click(object sender, RoutedEventArgs e) { ListBoxItem item = this.listBox1.SelectedItem as ListBoxItem; Catalog catalog = this.listBox1.SelectedItem as Catalog; int myindex = catalogs.IndexOf(catalog); catalogs[myindex].CatalogName = "我故意修改的!哈哈!!!"; }
[解决办法]
怀疑和ria service有关,我没用过这东西,你可以试下只是定义普通的实体,只有自动属性
public class Catalog{public int ID{get;set;}public string CatalogName{get;set;}}
[解决办法]
我之前问的很清楚,实体是不是只有自动属性,然后你告诉我的实体就是那么简单的只有两个自动属性。。。本来这就是问题的关键
ReportPropertyChanged("CatalogName");
这句话是关键,所以如果像你之前定义的那个实体,只有普通属性,是不可能引起UI更新的