WP8.1学习系列(第二十三章)——到控件的数据绑定
- 先决条件
- 将控件绑定到单个项目
- 将控件绑定到对象的集合
- 通过使用数据模板显示控件中的项目
- 添加详细信息视图
- 转换数据以在控件中显示
- 相关主题
本主题介绍了如何在使用 C++、C# 或 Visual Basic 的 Windows 应用商店应用中将控件绑定到单个项或将列表控件绑定到项目集合。此外,本主题向你介绍了如何自定义控件项目的显示、如何基于所选内容实现详细信息视图,以及如何转换数据以进行显示。有关更多详细信息,请参阅使用 XAML 进行数据绑定。
路线图: 本主题与其他主题有何关联?请参阅:
- 使用 C# 或 Visual Basic 的 Windows 运行时应用的路线图
- 使用 C++ 的 Windows 运行时应用的路线图
先决条件
将控件绑定到单个项目
数据绑定包括一个目标和一个源。目标通常是控件的属性,源通常是数据对象的属性。有关目标和源要求的信息,请参阅使用 XAML 进行数据绑定。
下面是将控件绑定到单个项目的一个示例。目标是文本框控件的 Text 属性。源是一个简单的音乐 Recording
类。
<Grid x:Name="LayoutRoot" Background="#FF0C0C0C"><TextBox x:Name="textBox1" Text="{Binding}" FontSize="30"Height="120" Width="440" IsReadOnly="True"TextWrapping="Wrap" AcceptsReturn="True" /> </Grid>
// Constructor public MainPage() {InitializeComponent();// Set the data context to a new Recording.textBox1.DataContext = new Recording("Chris Sells", "Chris Sells Live",new DateTime(2008, 2, 5)); }// A simple business object public class Recording {public Recording() { }public Recording(string artistName, string cdName, DateTime release){Artist = artistName;Name = cdName;ReleaseDate = release;}public string Artist { get; set; }public string Name { get; set; }public DateTime ReleaseDate { get; set; }// Override the ToString method.public override string ToString(){return Name + " by " + Artist + ", Released: " + ReleaseDate.ToString("d");} }
上述代码会产生类似下图的输出。
若要在文本框中显示音乐录音,请通过使用标记扩展将控件的 Text 属性设置为 Binding。在此示例中,默认情况下 Mode 是 OneWay,这意味着数据是从源检索的,但不会将更改传播回到源。
Recording
类有三个公共属性和一个 ToString 方法重写。这三个属性是 Artist
、Name
和ReleaseDate
。ToString 方法很重要,因为如果未指定任何格式,会出于显示目的在绑定对象上调用 ToString方法。该绑定的 Binding.Source 属性不是直接设置的,而是将 TextBox 控件的 DataContext 属性设置为一个新的 Recording
对象。
将控件绑定到对象的集合
以下示例将音乐 Recording
对象集合绑定到 ComboBox。若要尝试此示例,请单击组合框中的向下箭头,以查看绑定录音列表。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"><ComboBox x:Name="ComboBox1" ItemsSource="{Binding}"Foreground="Black" FontSize="30" Height="50" Width="780"/> </Grid>
public ObservableCollection<Recording> MyMusic = new ObservableCollection<Recording>();public Page() {InitializeComponent();// Add items to the collection.MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live",new DateTime(2008, 2, 5)));MyMusic.Add(new Recording("Luka Abrus","The Road to Redmond", new DateTime(2007, 4, 3)));MyMusic.Add(new Recording("Jim Hance","The Best of Jim Hance", new DateTime(2007, 2, 6)));// Set the data context for the combo box.ComboBox1.DataContext = MyMusic; }
上述代码会产生类似下图的输出。
若要显示 ComboBox 中的音乐录音,则将该控件的 ItemsSource 属性设置为 Binding,并将 ComboBox 控件的 DataContext 属性设置为 Recording
对象的集合,该集合为绑定提供源。针对集合中的每个项都创建了一个 ComboBoxItem。针对每个 Recording
对象将自动调用 ToString,以在组合框项中显示该对象。
通过使用数据模板显示控件中的项目
<ComboBox x:Name="ComboBox1" ItemsSource="{Binding}"Foreground="Black" FontSize="30" Height="50" Width="450"><ComboBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal" Margin="2"><TextBlock Text="Artist:" Margin="2" /><TextBlock Text="{Binding Artist}" Margin="2" /><TextBlock Text="CD:" Margin="10,2,0,2" /><TextBlock Text="{Binding Name}" Margin="2" /></StackPanel></DataTemplate></ComboBox.ItemTemplate> </ComboBox>
上述代码会产生类似下图的输出。
在 XAML 中,你可以看到数据模板定义。数据模板包含一个带有四个 TextBlock 控件的 StackPanel。堆叠面板具有一个水平方向,这样四个文本块控件会并排显示。其中两个 TextBlock 控件绑定到 Recording
对象的 Artist 和 Name 属性。另外两个 TextBlock 控件显示静态文本。对于每个绑定项,该绑定提供到 Recording
对象上的属性的路径。如上一示例中所示,该绑定依赖于要设置为录音列表的数据上下文。
此 XAML 使用属性元素语法。有关 XAML 语法的详细信息,请参阅快速入门:使用 XAML 创建用户界面。有关控件布局的详细信息,请参阅快速入门:定义布局。
添加详细信息视图
若要尝试此示例,请单击向下箭头,并选择不同的录音。请注意,艺术家、CD 名称和发布日期会显示在详细信息视图中的相应组合框下方。
<!--The UI for the details view--> <StackPanel x:Name="RecordingDetails"><TextBlock Text="{Binding Artist}" FontWeight="Bold" FontSize="30" /><TextBlock Text="{Binding Name}" FontStyle="Italic" FontSize="30" /><TextBlock Text="{Binding ReleaseDate}" FontSize="30" /> </StackPanel>
// Set the DataContext on the parent object instead of the ComboBox // so that both the ComboBox and details view can inherit it. // ComboBox1.DataContext = MyMusic; this.DataContext = new CollectionViewSource { Source = MyMusic };
上述代码会产生类似下图的输出。
在此示例中,将向包含现有组合框的用户控件中添加一个 StackPanel。接下来是包含用于显示录音详细信息的三个文本块的一个堆叠面板。每个文本块的 Text 属性将绑定到 Recording
对象上的某个属性。
转换数据以在控件中显示
如果需要在控件中设置某个非字符串类型(如 TextBox)的格式并显示该类型,则可以使用转换器。例如,你可以显示一个标签和一个已设置格式的日期,而不是仅显示该日期。
以下示例将展示在录音列表中发布日期的某个转换器实现。若要尝试此示例,请单击向下箭头,并选择不同的录音。请注意,下拉列表和详细信息视图中的发布日期会以自定义格式显示。
<UserControl x:Class="TestDataBindingQS.Page2"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="using:TestDataBindingQS"mc:Ignorable="d"d:DesignHeight="768" d:DesignWidth="1366"><UserControl.Resources><local:StringFormatter x:Key="StringConverter"/></UserControl.Resources><Grid x:Name="LayoutRoot" Background="#FF0C0C0C"><StackPanel Width="750" Height="200"VerticalAlignment="Center" HorizontalAlignment="Center"><ComboBox x:Name="ComboBox1" ItemsSource="{Binding}" Foreground="Black" FontSize="30" Height="50" Width="750"><ComboBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal" Margin="2"><TextBlock Text="Artist:" Margin="2" /><TextBlock Text="{Binding Artist}" Margin="2" /><TextBlock Text="CD:" Margin="10,2,0,2" /><TextBlock Text="{Binding Name}" Margin="2" /></StackPanel></DataTemplate></ComboBox.ItemTemplate></ComboBox><!--The UI for the details view--><StackPanel x:Name="RecordingDetails"><TextBlock Text="{Binding Artist}" FontSize="30" FontWeight="Bold" /><TextBlock Text="{Binding Name}" FontSize="30" FontStyle="Italic" /><TextBlock Text="{Binding ReleaseDate,Converter={StaticResource StringConverter},ConverterParameter=Released: \{0:d\}}" FontSize="30" /></StackPanel></StackPanel></Grid></UserControl>
public class StringFormatter : IValueConverter {// This converts the value object to the string to display.// This will work with most simple types.public object Convert(object value, Type targetType,object parameter, System.Globalization.CultureInfo culture){// Retrieve the format string and use it to format the value.string formatString = parameter as string;if (!string.IsNullOrEmpty(formatString)){return string.Format(culture, formatString, value);}// If the format string is null or empty, simply// call ToString() on the value.return value.ToString();}// No need to implement converting back on a one-way bindingpublic object ConvertBack(object value, Type targetType,object parameter, System.Globalization.CultureInfo culture){throw new NotImplementedException();} }
上述代码会产生类似下图的输出。
转换器是从 IValueConverter 接口派生出的一个类。IValueConverter 有两种方法:Convert 和ConvertBack。对于从数据源到绑定目标的单向绑定,仅仅需要实现 Convert 方法。此示例中的转换器是相当通用的。可以将所需的字符串格式作为参数传递,且转换器会使用 String.Format 方法执行转换。如果未传递任何格式字符串,则转换器会返回在对象上调用 ToString 的结果。
在你实现转换器之后,你要立即创建转换器类的一个实例,并通知绑定使用此实例。在此示例中,这是在 XAML 中执行的。转换器的实例是作为静态资源创建的,并会向其分配一个键。在绑定上设置转换器属性时,会使用该键。
有关如何转换数据以便在控件中显示的详细信息,请参阅IValueConverter。
WP8.1学习系列(第二十三章)——到控件的数据绑定相关推荐
- WP8.1学习系列(第五章)——中心控件Hub或透视控件Pivot交互UX
具有主页菜单(中心或透视控件)的中心应用中心 你可能要设计包含许多功能的应用.当你看着这些功能时,可能会决定将它们整理到独立的区域中.这些区域最终会成为用户要访问的应用的独立部分.你需要设计一个简便的 ...
- WP8.1学习系列(第二十五章)——控件样式
XAML 框架提供许多自定义应用外观的方法.通过样式可以设置控件属性,并重复使用这些设置,以便保持多个控件具有一致的外观. 路线图: 本主题与其他主题有何关联?请参阅: 使用 C# 或 Visua ...
- WP8.1学习系列(第二十章)——添加控件和处理事件
先决条件 添加控件 设置控件的名称 设置控件属性 创建事件处理程序 新控件 总结 相关主题 通过使用如按钮.文本框和组合框等控件,你可以创建应用的 UI. 下面将显示如何将控件添加到应用.处理控件时, ...
- WP8.1学习系列(第二十二章)——在页面之间导航
在本文中 先决条件 创建导航应用 Frame 和 Page 类 页面模板中的导航支持 在页面之间传递信息 缓存页面 摘要 后续步骤 相关主题 重要的 API Page Frame Navigation ...
- WP8.1学习系列(第二章)——Toast通知
Toast 通知概述(Windows 运行时应用) 你的应用要想通过 Toast 通知通信,必须在应用的清单文件中声明它支持 Toast.Toast 通知可包含文本,并且 Windows 上的 Toa ...
- asp.net ajax学习系列功能强大的UpdatePanel控件
先给一个简单的例子,后面给一个比较复杂的例子. 改进后的UpdatePanel使页面部分更新(Partial-Page Updates)实现起来非常容易. 要想在已有web页面或新建页面中加入部分更新 ...
- 深入学习SAP UI5框架代码系列之四:SAP UI5控件的元数据实现
这是Jerry 2021年的第5篇文章,也是汪子熙公众号总共第276篇原创文章. 系列目录 (0) SAP UI5应用开发人员了解UI5框架代码的意义 (1) UI5 module懒加载机制 (2) ...
- 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 【正点原子Linux连载】第二十三章 DDR3实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
最新文章
- 留不住客户?该从你的系统上找找原因了
- winform如何保持TreeView节点展开和折叠的状态
- Linux的kickstart安装详解
- openfire安装配置完全教程
- 计算矩阵连乘积(动态规划)
- 【1024】阿里开源项目汇总
- .net 下语音合成
- winCE下Unicode编码
- tkinter中text属性_python tkinter基本属性详解
- hibernate get方法有执行sql但是后台拿不到_「6」进大厂必须掌握的面试题-Hibernate...
- 【clickhouse】yandex 官方 BalancedClickhouseDataSource 源码分析
- 都说“先卖人,后卖货”,或者说要想卖货,先卖人
- Spark算子--Scala版本 educoder
- centos7 端口3306无法连接问题
- 2020 年最牛逼的 10 门编程语言
- android定位!每个程序员都必须掌握的8种数据结构!完整版开放下载
- QT网络编程TCP/UDP开发流程 制作网络调试助手
- 基于MATLAB的疲劳检测
- MP3音频文件转换成caf格式
- CSDN博客专家认证通过暨我的CSDN成长之路!