个人资料

跳过导航链接首页 > 博客列表 > 博客正文

UWP中ListView数据绑定专题,适用于WPF(一)

分类:

    数据绑定是个好东西,基本上分两种,一种简单绑定,后台数据传给前台视图显示即可,另一种是带“互动”的绑定,前台数据改变可以影响后台,后台数据改变也可以影响前台(可以单相,也可以双向)。这里主要介绍第二种常见的实现方法(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模板。


专题二:数据绑定模板选择

专题三:数据绑定分页。

songshizhao
最初发表2017/4/16 11:10:54 最近更新2017/4/16 11:10:54 10026
为此篇作品打分
10
   评论