数据绑定是个好东西,基本上分两种,一种简单绑定,后台数据传给前台视图显示即可,另一种是带“互动”的绑定,前台数据改变可以影响后台,后台数据改变也可以影响前台(可以单相,也可以双向)。这里主要介绍第二种常见的实现方法(WPF适用)
这里不想对数据绑定过分解读,先从熟悉的开始入手,DataContext属性,在书里翻译为数据上下文。在XAML视图中,你可以看见Grid控件都具有这个属性,这个属性怎么用呢?比如说一个父级grid包含了很多子grid,子grid中的一个控件需要进行数据绑定,我们可以给子Grid绑定数据上下文,也可以给父grid绑定数据上下文。即有数据上下文数据的控件会向下查找来绑定数据,如果你页面Page中只有一条数据上下文,那么只需要在Page的主Grid中绑定DataContext属性,页面中所有控件皆可以绑定数据上下文中的数据。
数据上下文如何绑定?
首先要了解数据上下文绑定的是什么?数据上下文必须要绑定类的实例或者类的实例集合(如果你要绑定ListView之类的话),如果你要是用数据上下文,首先必须要有一个类。首先回到ListView这个控件来说,定义一个空的ListView控件,itemsSource通过数据绑定给出,如下:
<ListView x:Name="listView" Header="xxxx" ItemsSource="{Binding}"> </ListView>
在后台,给ListView赋予数据上下文。
listView.DataContext = data;
就这样,我们就完成了数据绑定,data就是我们的类的集合。observableCollection是一个具有Iobservable接口的List(可以双向绑定)。
ObservableCollection<ClassIndex> data = new ObservableCollection<ClassIndex>(); ClassIndex ClassIndex_Instance=new ClassIndex(); ... data.Add(ClassIndex_Instance);其中ClasssIndex是我建立的一个类。
class ClassIndex { public string IndexTitle { get; set; } public int IndexId { get; set; } public int Downloads { get; set; } }
如果想双向绑定,这个类应该实现Iobservable接口,上面的没有加。通过实例化这个类给实例赋予属性,然后将实例添加到List(上文的Data)中,即实现了数据绑定。
多说一句,ListView数据绑定后,ListViewItem获得数据后会根据数据模板Template来显示这些数据,所以应该给ListView写一个数据模板,这些数据模板绑定的就是ClassIndex的属性,一个简单的示例:
<DataTemplate x:Key="lv"> <Grid Height="80" Width="auto"> <TextBlock Text="{Binding IndexId}" FontSize="25" Foreground="Black" VerticalAlignment="Center" HorizontalAlignment="Center"> </TextBlock> <TextBlock Text="{Binding IndexTitle}" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="Coral"> </Grid> </DataTemplate>
ListView就需要指定ListView的ListViewItemTemplate为上文编写的模板lv,即ListViewItemTemplate="{StaticResource lv}" 或者在ListView中编写ListViewItemTemplate模板。