首页 > 代码库 > WPF笔记整理--DataBinding(1)

WPF笔记整理--DataBinding(1)

WPF的数据绑定是一大亮点。如果用WPF而不用数据绑定,那就太失败了。

也不多废话,如果不知道如何绑定,请百度一下。这里简单的提几点:

1. ObservableCollection可用于集合绑定,由于已经实现了INotifyPropertyChanged,可以通过添加删除集合中的元素来实现对UI列表项更新。注意,当一个ObservableCollection已经有元素,通过再次new集合并不能实现清空页面已显示的内容。 如果希望ObservableCollection中某列表项的属性值改变显示在界面上,要实现INotifyPropertyChanged。例如,有个应用是关于卖图书的电子商务网站,有个页面是用来显示图书信息的。图书的对象Book,有3个属性:书名Name,价格Price,数量Count。用WPF数据绑定实现在图书增减,价格和数量变化时页面随时更新。书的集合定义 ObservableCollection<Book>,这样在图书增加,或移除会在UI体现。而Book 对应的class要实现INotifyPropertyChanged,这样在Price和Count变化时会在UI体现。

2. 用ListBox的时候,ItemsSource绑定了对象,这事如果在xaml里面又定义了ListBoxItem标签,会导致程序一启动就崩溃,貌似VS还捕获不到异常。

3.这个是前几天遇到的,还没时间研究原因是什么。只提一下现象和解决办法。

有个UserControl包含数量不定的图片,而且要保证这个图片列表随时更新。于是定义了个Timer来Check是否有新的图片数据,如果有就更新图片列表。图片列表是保存在ObservableCollection中。在xaml中给这个UC定义x:Name,然后在ListBox的ItemsSource ==”{Binding ElementName=UCName, Path=Collection}”。结果无论如何界面上都没有图片显示。后来debug时发现,后台的collection对象的值是expected,而ListBox的ItemsSource一直是null。目前解决办法是在Loaded事件中,直接ItemsSource=collection就正常了。目前怀疑是多线程的原因。