WPF学习笔记 - 绑定到集合

来源:互联网 发布:c语言求1到20的阶乘和 编辑:程序博客网 时间:2024/05/16 01:05

ListBox以及所有的ItemsControl都有一个叫ItemSource的依赖属性可以作为目标属性进行绑定。

<ListBox x:Name="pictureBox"

ItemSource="{Binding Source={StaticResource photos}}"

/>

为了让目标属性与源属性保持同步,必须实现INotifyPropertyChanged接口,事实上ObservableCollection既实现了这个接口,还实现了INotifyCollectionChanged接口,所以从这个类继承的源对象可以实现集合发生改变时的同步。

为了让ListBox显示得更友好一些,可以配合ListBox的另外一个依赖属性DisplayMemberPath来绑定需要显示的内容,例如:

<ListBox x:Name="pictureBox" DisplayMemberPath="Name"

ItemSource="{Binding Source={StaticResource photos}}" (photos对象有一个Name属性)

/>

需要注意的是,ItemsControl的ItemSource属性与Items属性不能同时使用,ItemSource只有当Items属性为空时才能设置,反过来也是,但是在代码中,不管是通过哪种方式添加的项,总是通过Items属性来获得的。

 

Selector(选择控件,比如ListBox)

当把一个Selector与一个集合绑定时,WPF可以跟踪选中项,这样有一个好处是,其他绑定到这个源的控件可以利用这些信息,但不需要自己去写逻辑。这种特性可以用来创建主/从关系的用户界面,或者可以同步多个绑定到相同源的Selector控件,他们的实现是通过Selector的IsSynchronizedWithCurrentItem属性来设置的, 例如:

<ListBox IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"

ItemSource=="{Binding Source={StaticResource photos}}" />

<ListBox IsSynchronizedWithCurrentItem="True" DisplayMemberPath="DateTime"

ItemSource=="{Binding Source={StaticResource photos}}" />

<ListBox IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Size"

ItemSource=="{Binding Source={StaticResource photos}}" />

这样,当改变其中任意一个控件的选中项时都会改变另外两个控件。如果其中任何一个没有设置该属性为True,则不会影响到其他的控件。需要注意,它不支持多选中项的同步。