当Item的属性发生变化时刷新ObservableCollection

时间:2014-03-06 10:19:02

标签: windows-phone-8 refresh observablecollection inotifypropertychanged

我有一个observableCollection,它加载了元素并显示在UI上。同时应用程序正在为可观察集合的每个元素下载一个Icon。我想在下载完成后显示每个Icon ...

我的代码正在运行,但我想这不是最好的实践,因为我将我的集合绑定到Ui控件2次......我相信它不应该是必要的...我尝试实现InotifypropertyChanged on元素的Icon属性,但我仍然需要添加这些代码行来显示图标:

 listDocsLibs = new ObservableCollection<BdeskDocLib>(listBoxGetDocsLibs);          
 llslistDocslibs.ItemsSource = listDocsLibs;

下载图标的功能

List<BdeskDocLib> listBoxGetDocsLibs = new List<BdeskDocLib>();            

ObservableCollection<BdeskDocLib> listDocsLibs = new ObservableCollection<BdeskDocLib>();

 private async void LoadIconDocLibs()
        {
            foreach (var doclib in listBoxGetDocsLibs)
            {

                    byte[] Icon = await ServerFunctions.GetDocLibsIcon(doclib);

                    if (Icon != null)
                    {
                        {

                            var ms = new MemoryStream(Icon);

                            BitmapImage photo = new BitmapImage();
                            photo.DecodePixelHeight = 64;
                            photo.DecodePixelWidth = 92;
                            photo.SetSource(ms);
                            doclib.Icon = photo;
                        }
                    }

                    else if (Icon == null)
                    {
                        doclib.Icon = new BitmapImage();
                        doclib.Icon.UriSource = new Uri("/Images/BDocs/ico_ext_inconnu.png", UriKind.Relative);

                    }
                }
            }

            //IM PRETTY SURE The following code IS NOT NECESSARY BUT WHY MY UI IS NOT REFRESHING WITHOUT ?
            listDocsLibs = new ObservableCollection<BdeskDocLib>(listBoxGetDocsLibs);
            llslistDocslibs.ItemsSource = listDocsLibs;

        }

0 个答案:

没有答案