UWP入门(十二)--数据绑定用法

原文:UWP入门(十二)--数据绑定用法

主要几个元素:

  • Template
  • DataTemplate
  • ItemSource

数据绑定是一个数据提取的方法,能使数据和UI上的控件紧密相连,下面的Demo是这样的:

有许多书的集合,书 类中有图片、标题、作者和ID,把它成现在GridView 控件上,每次点击GridView 的时候动态显示书本信息

github 代码

效果图:

原理图:

1. Template

为GridView 创建一个Template,决定每个独立的图书对象如何呈现在屏幕上

 <GridView ItemsSource="{x:Bind Books}"
                  IsItemClickEnabled="True"
                  ItemClick="GridView_ItemClick"
                  ItemTemplate="{StaticResource BookDataTemplate}">
        </GridView>

2. DataTemplate

在这里面我们可以实现 具体的如何将书呈现在屏幕上,Grid、StackPanel 等控件

<DataTemplate x:DataType="data:Book" x:Key="BookDataTemplate">
            <StackPanel HorizontalAlignment="Center">
                <Image Width="150" Source="{x:Bind CoverImage}" />
                <TextBlock FontSize="16" Text="{x:Bind Title}" HorizontalAlignment="Center" />
                <TextBlock FontSize="10" Text="{x:Bind Author}" HorizontalAlignment="Center" />
            </StackPanel>
        </DataTemplate>

3. ItemSource 告知绑定的是什么

//就是这句话
ItemsSource="{x:Bind Books}" 
 <GridView ItemsSource="{x:Bind Books}"
                  IsItemClickEnabled="True"
                  ItemClick="GridView_ItemClick"
                  ItemTemplate="{StaticResource BookDataTemplate}">
        </GridView>

4. 告知 DataTemplate 它们使用的数据类型

//就是这一句话
 x:DataType="data:Book" 

为了让它生效,得在最上面加上命名空间

//Book类所在的地方
xmlns:data="using:xBindDataExample.Models"

完整的写法

 <DataTemplate x:DataType="data:Book" x:Key="BookDataTemplate">
            <StackPanel HorizontalAlignment="Center">
                <Image Width="150" Source="{x:Bind CoverImage}" />
                <TextBlock FontSize="16" Text="{x:Bind Title}" HorizontalAlignment="Center" />
                <TextBlock FontSize="10" Text="{x:Bind Author}" HorizontalAlignment="Center" />
            </StackPanel>
        </DataTemplate>

5. 代码

5.1 Book

public class Book
    {
        public int BookId { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public string CoverImage { get; set; }
    }

    public class BookManager
    {
        public static List<Book> GetBooks()
        {
            var books = new List<Book>();

            books.Add(new Book { BookId = 1, Title = "Vulpate", Author = "Futurum", CoverImage="Assets/1.png" });
            books.Add(new Book { BookId = 2, Title = "Mazim", Author = "Sequiter Que", CoverImage = "Assets/2.png" });
            books.Add(new Book { BookId = 3, Title = "Elit", Author = "Tempor", CoverImage = "Assets/3.png" });
            books.Add(new Book { BookId = 4, Title = "Etiam", Author = "Option", CoverImage = "Assets/4.png" });
            books.Add(new Book { BookId = 5, Title = "Feugait Eros Libex", Author = "Accumsan", CoverImage = "Assets/5.png" });
            books.Add(new Book { BookId = 6, Title = "Nonummy Erat", Author = "Legunt Xaepius", CoverImage = "Assets/6.png" });
            books.Add(new Book { BookId = 7, Title = "Nostrud", Author = "Eleifend", CoverImage = "Assets/7.png" });
            books.Add(new Book { BookId = 8, Title = "Per Modo", Author = "Vero Tation", CoverImage = "Assets/8.png" });
            books.Add(new Book { BookId = 9, Title = "Suscipit Ad", Author = "Jack Tibbles", CoverImage = "Assets/9.png" });
            books.Add(new Book { BookId = 10, Title = "Decima", Author = "Tuffy Tibbles", CoverImage = "Assets/10.png" });
            books.Add(new Book { BookId = 11, Title = "Erat", Author = "Volupat", CoverImage = "Assets/11.png" });
            books.Add(new Book { BookId = 12, Title = "Consequat", Author = "Est Possim", CoverImage = "Assets/12.png" });
            books.Add(new Book { BookId = 13, Title = "Aliquip", Author = "Magna", CoverImage = "Assets/13.png" });

            return books;
        }
    }

5.2 MainPage.xaml.cs

public sealed partial class MainPage : Page
    {
        private List<Book> Books;

        public MainPage()
        {
            this.InitializeComponent();
            Books = BookManager.GetBooks();
        }

        private void GridView_ItemClick(object sender, ItemClickEventArgs e)
        {
            var book = (Book)e.ClickedItem;
            ResultTextBlock.Text = "You selected " + book.Title;
        }
    }

5.3 MainPage.xaml

<Page
    x:Class="ListViewExample.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:ListViewExample"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:data="using:ListViewExample.Model"
    mc:Ignorable="d">
    <Page.Resources>
        <DataTemplate x:Key="BookListDataTemplate" x:DataType="data:Book">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                <Image Name="image" Source="{x:Bind CoverImage}" HorizontalAlignment="Center" Width="150" />
                <StackPanel Margin="20,20,0,0">
                    <TextBlock Text="{x:Bind Title}" HorizontalAlignment="Left" FontSize="16" />
                    <TextBlock Text="{x:Bind Author}" HorizontalAlignment="Left" FontSize="10" />
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </Page.Resources>
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="0,20,20,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="100" />
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="1"
                   Name="ResultTextBlock"
                   FontSize="24"
                   Foreground="Red"
                   FontWeight="Bold"
                   Margin="20,20,0,0" />
        <ListView ItemsSource="{x:Bind Books}"
                  ItemClick="ListView_ItemClick"
                  IsItemClickEnabled="True"
                  ItemTemplate="{StaticResource BookListDataTemplate}">
        </ListView>
    </Grid>
</Page>
时间: 2024-08-02 21:01:33

UWP入门(十二)--数据绑定用法的相关文章

UWP入门(二) -- 基础笔记

原文:UWP入门(二) -- 基础笔记 不错的UWP入门视频,1092417123,欢迎交流 UWP-04 - What i XMAL? XAML - XML Syntax(语法) ,create instance of Classes that define the UI by setting properties(属性). UWP-05 - Understanding Type Converters Type Converters - Convert literal(字面的) strings

AngularJS入门教程之数据绑定用法示例_AngularJS

本文实例讲述了AngularJS数据绑定用法.分享给大家供大家参考,具体如下: 数据绑定是AngularJS中非常重要的特性,我们看一下下面的例子: <!DOCTYPE html> <html ng-app> <head lang="en"> <meta charset="UTF-8"> <script type="text/javascript" src="angular-1.3.

Kinect for Windows SDK开发入门(十二)语音识别 上

Kinect的麦克风阵列在Kinect设备的下方.这一阵列由4个独立的水平分布在Kinect下方的麦克风组成.虽然每一个麦克风都捕获相同的音频信号,但是组成阵列可以探测到声音的来源方向.使得能够用来识别从某一个特定的方向传来的声音.麦克风阵列捕获的音频数据流经过复杂的音频增强效果算法处理来移除不相关的背景噪音.所有这些复杂操作在Kinect硬件和Kinect SDK之间进行处理,这使得能够在一个大的空间范围内,即使人离麦克风一定的距离也能够进行语音命令的识别. 在Kinect第一次作为Xbox3

Windows 8风格应用开发入门 十二 SearchContract概述及原理

Search Contract概述 使用过Windows 8操作系统的开发者都知道什么是Charms(超级按钮).其中在Charms中包含了一个Search,微软称之为Search Contact,我们可以在应用中调用Search Contract相应的API来实现应用搜索功能. 使用Search Contract可以从系统的任何位置进入到我们的应用进行搜索,意思就是不管我们在操作系统上面做任何事情都可以随时使用Search Contract对第三方应用进行应用内搜索. Search Contr

Windows 8风格应用开发入门 二十五 数据绑定

数据绑定是一种简单方式来显示数据,UI元素与数据对象之间的连接或绑定是允许数据在两者之间 流动的.另外建立了绑定且数据发生变化时,相应的UI元素会自动显示变化. 如何将UI元素与 数据进行绑定 开发入门 二十五 数据绑定-windows开发入门"> 从上面图可以知道,每个绑定必须指定一个源和一个目标. 其中源对象可以是任何CLR对象,包括目标元素自身和其他UI元素.目标可以是 FrameworkElement的任何DependencyProperty(依赖属性). 数据绑定引擎从Bindi

UWP开发入门(十二)——神器Live Visual Tree

原文:UWP开发入门(十二)--神器Live Visual Tree 很久以前,我们就有Snoop这样的工具实时修改.查看正在运行的WPF程序,那时候调个样式,修改个模板,相当滋润.随着历史的车轮陷进WP的泥潭中,无论WP7的Silverlight还是WP8.1的runtime,偶们都不能方便快捷的查看APP的可视化树(Visual Tree)了,呜呼哉,是可忍孰不可忍放下筷子就骂微软.没想到Visual Studio 2015倒是给了我们一个惊喜,自带了一套非常强大的调试工具Live Visu

UWP开发入门(二)——RelativePanel

原文:UWP开发入门(二)--RelativePanel RelativePanel也是Win10 UWP新增的控件,和上篇提到的SplitView一样在UWP的UI布局起到非常重要的作用.说句实在话,这货其实就是为了UWP的Adaptive UI而特意增加的,由于他的功能和DockPanel有相当的重叠,以至于DockPanel被从Win10 SDK中被撸掉了--太惨了-- 为什么说RelativePanel可以替代DockPanel,我们可以先从几个比较重要的属性看起:AlignLeftWi

走近VB.Net(十二) 注册表快速入门

快速入门|注册表 走近VB.Net(十二) 注册表快速入门 作者:hejianzhong VB.Net中文站(http://vbnetcn.126.com) 首先介绍一下注册表的相关基础知识:注册表的每一个文件夹被称为一个Key(项),这个文件夹的子文件夹被称为SubKey(子项),而在一个子项中有不同的Value Name(值项-即数值顶),值项后面就是你要保存的数据Value Data(数据)了.而在子项中通常都有一个Default Value 是默认的Value Name,相信打开过注册表

Windows 8开发入门(十二) windows 8的文件管理 1

File创建和String Stream Buffer方式读写 在本文中我们将学习Windows 8中的文件创建和多种读写方式以及设置文档库访问权限和文件类型的访问. 当然我们需要做以下准备工作: 首先:设置程序允许访问的文件位置为:"库\文档",设置方法:点击"Package.appxmanifest ",然后选择"功能"选项卡,在功能列表中勾选"文档库访问".如下图: 开发入门(十二) windows 8的文件管理 1-w