绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
背水一战 Windows 10 之 绑定
- 通过 Binding 绑定对象
- 通过 x:Bind 绑定对象
- 通过 Binding 绑定集合
- 通过 x:Bind 绑定集合
示例
1、演示如何通过 Binding 绑定对象
Bind/BindingModel.xaml

- <Page
- x:Class="Windows10.Bind.BindingModel"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:Windows10.Bind"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d">
- <Grid Name="root" Background="Transparent">
- <StackPanel Margin="10 0 10 10">
- <TextBlock Name="lblMsg" Margin="5" />
- <TextBox Text="{Binding Name, Mode=TwoWay}" Margin="5" />
- <TextBox Text="{Binding Age, Mode=TwoWay}" Margin="5" />
- <ToggleSwitch IsOn="{Binding IsMale, Mode=TwoWay}" OffContent="女" OnContent="男" Header="性别" Margin="5" />
- </StackPanel>
- </Grid>
- </Page>

Bind/BindingModel.xaml.cs

- /*
- * 演示如何通过 Binding 绑定对象
- *
- *
- * 如果需要数据源在属性值发生变化时对外通知,则需要实现 INotifyPropertyChanged 接口(为了简化实现,建议继承 Common/BindableBase.cs 这个类)
- * PropertyChanged - 对象的属性的值发生变化时触发的事件
- */
- using System;
- using System.ComponentModel;
- using Windows.System.Threading;
- using Windows.UI.Core;
- using Windows.UI.Xaml.Controls;
- using Windows10.Common;
- namespace Windows10.Bind
- {
- public sealed partial class BindingModel : Page
- {
- private Employee _employee;
- public BindingModel()
- {
- this.InitializeComponent();
- this.Loaded += BindingModel_Loaded;
- }
- void BindingModel_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
- {
- // 创建一个需要绑定的实体对象(注:Employee 实现了 INotifyPropertyChanged 接口)
- _employee = new Employee();
- _employee.Name = "webabcd";
- _employee.Age = 33;
- _employee.IsMale = true;
- // Employee 对象的属性的值发生变化时触发的事件(源自 INotifyPropertyChanged 接口)
- _employee.PropertyChanged += _employee_PropertyChanged;
- // 指定数据上下文(绑定的数据源)
- root.DataContext = _employee;
- // 每 5 秒更新一次数据
- ThreadPoolTimer.CreatePeriodicTimer
- (
- (timer) =>
- {
- var ignored = Dispatcher.RunAsync
- (
- CoreDispatcherPriority.Normal,
- () =>
- {
- Random random = new Random();
- _employee.Age = random.Next(10, 100);
- _employee.IsMale = random.Next() % 2 == 0 ? true : false;
- }
- );
- },
- TimeSpan.FromMilliseconds(5000)
- );
- }
- // 每次属性的值发生变化时,显示变化后的结果
- void _employee_PropertyChanged(object sender, PropertyChangedEventArgs e)
- {
- lblMsg.Text = "属性:“" + e.PropertyName + "”的值发生了变化";
- lblMsg.Text += Environment.NewLine;
- lblMsg.Text += string.Format("当前的值为:Name-{0}, Age-{1}, IsMale-{2}", _employee.Name, _employee.Age, _employee.IsMale);
- }
- }
- }

2、演示如何通过 x:Bind 绑定对象
Bind/BindModel.xaml

- <Page
- x:Class="Windows10.Bind.BindModel"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:Windows10.Bind"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d">
- <Grid Background="Transparent">
- <StackPanel Margin="10 0 10 10">
- <TextBlock Name="lblMsg" Margin="5" />
- <TextBox Text="{x:Bind CurrentEmployee.Name, Mode=TwoWay}" Margin="5" />
- <TextBox Text="{x:Bind CurrentEmployee.Age, Mode=TwoWay}" Margin="5" />
- <ToggleSwitch IsOn="{x:Bind CurrentEmployee.IsMale, Mode=TwoWay}" OffContent="女" OnContent="男" Header="性别" Margin="5" />
- </StackPanel>
- </Grid>
- </Page>

Bind/BindModel.xaml.cs

- /*
- * 演示 x:Bind 绑定的相关知识点
- *
- *
- * 如果需要数据源在属性值发生变化时对外通知,则需要实现 INotifyPropertyChanged 接口(为了简化实现,建议继承 Common/BindableBase.cs 这个类)
- * PropertyChanged - 对象的属性的值发生变化时触发的事件
- */
- using System;
- using System.Collections.ObjectModel;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows10.Common;
- namespace Windows10.Bind
- {
- // x:Bind 的数据上下文就是它所属的 Page 或 UserControl
- public sealed partial class BindDemo : Page
- {
- public BindDemo()
- {
- this.InitializeComponent();
- }
- // 事件绑定到方法,无参数
- private void EventBindNoArgs()
- {
- CurrentEmployee.Name = "wanglei" + new Random().Next(1000, 10000).ToString();
- }
- // 事件绑定到方法,参数与对应的事件的参数相同
- private void EventBindRegularArgs(object sender, RoutedEventArgs e)
- {
- CurrentEmployee.Name = "wanglei" + new Random().Next(1000, 10000).ToString();
- }
- // 事件绑定到方法,参数与对应的事件的参数相同,但是其中的事件参数为 object 类型
- private void EventBindBaseArgs(object sender, object e)
- {
- CurrentEmployee.Name = "wanglei" + new Random().Next(1000, 10000).ToString();
- }
- public Employee CurrentEmployee { get; set; } = new Employee() { Name = "wanglei", Age = 36, IsMale = true };
- public ObservableCollection<Employee> AllEmployees { get; set; } = TestData.GetEmployees(5);
- }
- }

3、示如何通过 Binding 绑定集合
Bind/BindingCollection.xaml

- <Page
- x:Class="Windows10.Bind.BindingCollection"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:Windows10.Bind"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d">
- <Grid Background="Transparent">
- <StackPanel Orientation="Vertical" VerticalAlignment="Top" Margin="10 0 10 10">
- <Button Name="btnDelete" Content="删除第 1 条数据" Click="btnDelete_Click" Margin="5" />
- <Button Name="btnUpdate" Content="更新前 2 条数据" Click="btnUpdate_Click" Margin="5" />
- <ListView x:Name="listView" Margin="5">
- <ListView.ItemTemplate>
- <DataTemplate>
- <Border Background="Blue" Width="200" CornerRadius="3" HorizontalAlignment="Left">
- <TextBlock Text="{Binding Name}" />
- </Border>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
- </StackPanel>
- </Grid>
- </Page>

Bind/BindingCollection.xaml.cs

- /*
- * 演示如何通过 Binding 绑定集合
- *
- *
- * 如果需要集合数据源在数据添加,删除,更新时对外通知,则需要实现 INotifyCollectionChanged 接口
- * CollectionChanged - 集合数据在发生添加,删除,更新时触发的事件
- */
- using System;
- using System.Collections.ObjectModel;
- using System.Collections.Specialized;
- using System.Linq;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows10.Common;
- namespace Windows10.Bind
- {
- public sealed partial class BindingCollection : Page
- {
- // ObservableCollection<T> 实现了 INotifyCollectionChanged 接口
- private ObservableCollection<Employee> _employees;
- public BindingCollection()
- {
- this.InitializeComponent();
- this.Loaded += BindingCollection_Loaded;
- }
- void BindingCollection_Loaded(object sender, RoutedEventArgs e)
- {
- _employees = new ObservableCollection<Employee>(TestData.GetEmployees());
- // 集合数据在发生添加,删除,更新时触发的事件(源自 INotifyCollectionChanged 接口)
- _employees.CollectionChanged += _employees_CollectionChanged;
- // 指定 ListView 的数据源
- listView.ItemsSource = _employees;
- }
- void _employees_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- /*
- * e.Action - 引发此事件的操作类型(NotifyCollectionChangedAction 枚举)
- * Add, Remove, Replace, Move, Reset
- * e.OldItems - Remove, Replace, Move 操作时影响的数据列表
- * e.OldStartingIndex - Remove, Replace, Move 操作发生处的索引
- * e.NewItems - 更改中所涉及的新的数据列表
- * e.NewStartingIndex - 更改中所涉及的新的数据列表的发生处的索引
- */
- }
- private void btnDelete_Click(object sender, RoutedEventArgs e)
- {
- // 此处的通知来自 INotifyCollectionChanged 接口
- _employees.RemoveAt(0);
- }
- private void btnUpdate_Click(object sender, RoutedEventArgs e)
- {
- Random random = new Random();
- // 此处的通知来自实现了 INotifyPropertyChanged 接口的 Employee
- _employees.First().Name = random.Next(1000, 10000).ToString();
- // 此处的通知来自 INotifyCollectionChanged 接口
- _employees[1] = new Employee() { Name = random.Next(1000, 10000).ToString() };
- }
- }
- }

4、演示如何通过 x:Bind 绑定集合
Bind/BindCollection.xaml

- <Page
- x:Class="Windows10.Bind.BindCollection"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:Windows10.Bind"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:common="using:Windows10.Common"
- mc:Ignorable="d">
- <Grid Background="Transparent">
- <StackPanel Orientation="Vertical" VerticalAlignment="Top" Margin="10 0 10 10">
- <Button Name="btnDelete" Content="删除第 1 条数据" Click="btnDelete_Click" Margin="5" />
- <Button Name="btnUpdate" Content="更新前 2 条数据" Click="btnUpdate_Click" Margin="5" />
- <ListView x:Name="listView" ItemsSource="{x:Bind Employees}" Margin="5">
- <ListView.ItemTemplate>
- <DataTemplate x:DataType="common:Employee">
- <Border Background="Blue" Width="200" CornerRadius="3" HorizontalAlignment="Left">
- <TextBlock Text="{x:Bind Name, Mode=OneWay}" />
- </Border>
- </DataTemplate>
- </ListView.ItemTemplate>
- </ListView>
- </StackPanel>
- </Grid>
- </Page>

Bind/BindCollection.xaml.cs

- /*
- * 演示如何通过 x:Bind 绑定集合
- *
- *
- * 如果需要集合数据源在数据添加,删除,更新时对外通知,则需要实现 INotifyCollectionChanged 接口
- * CollectionChanged - 集合数据在发生添加,删除,更新时触发的事件
- */
- using System;
- using System.Collections.ObjectModel;
- using System.Collections.Specialized;
- using System.Linq;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows10.Common;
- namespace Windows10.Bind
- {
- public sealed partial class BindCollection : Page
- {
- // 数据源
- // ObservableCollection<T> 实现了 INotifyCollectionChanged 接口
- public ObservableCollection<Employee> Employees { get; set; } = new ObservableCollection<Employee>(TestData.GetEmployees());
- public BindCollection()
- {
- this.InitializeComponent();
- this.Loaded += BindCollection_Loaded;
- }
- void BindCollection_Loaded(object sender, RoutedEventArgs e)
- {
- // 集合数据在发生添加,删除,更新时触发的事件(源自 INotifyCollectionChanged 接口)
- Employees.CollectionChanged += Employees_CollectionChanged;
- }
- void Employees_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- /*
- * e.Action - 引发此事件的操作类型(NotifyCollectionChangedAction 枚举)
- * Add, Remove, Replace, Move, Reset
- * e.OldItems - Remove, Replace, Move 操作时影响的数据列表
- * e.OldStartingIndex - Remove, Replace, Move 操作发生处的索引
- * e.NewItems - 更改中所涉及的新的数据列表
- * e.NewStartingIndex - 更改中所涉及的新的数据列表的发生处的索引
- */
- }
- private void btnDelete_Click(object sender, RoutedEventArgs e)
- {
- // 此处的通知来自 INotifyCollectionChanged 接口
- Employees.RemoveAt(0);
- }
- private void btnUpdate_Click(object sender, RoutedEventArgs e)
- {
- Random random = new Random();
- // 此处的通知来自实现了 INotifyPropertyChanged 接口的 Employee
- Employees.First().Name = random.Next(1000, 10000).ToString();
- // 此处的通知来自 INotifyCollectionChanged 接口
- Employees[1] = new Employee() { Name = random.Next(1000, 10000).ToString() };
- }
- }
- }
绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合的更多相关文章
- 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
[源码下载] 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合 作 ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- SQL state [72000]; error code [1461]; ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值 ; nested exception is java.sql.BatchUpdateException: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
本文转自 https://www.cnblogs.com/yingsong/p/5685790.html 原 因:某一个字段本为varchar2(1024),但是实际要插入的值超过varchar2允 ...
- JavaScript对象(一)——Function对象
写在最前面: 对象只是带有属性和方法的特殊数据类型(js的7种数据类型:字符串,数字,布尔,数组,对象,null,undefined). JavaScript是面向对象的语言,但是JavaScript ...
- 程序猿都没对象,JS竟然有对象?
现在做项目基本是套用框架,不论是网上的前端还是后端框架,也会寻找一些封装好的插件拿来即用,但还是希望拿来时最好自己过后再回过头了解里面的原理,学习里面优秀的东西,不论代码封装性,还是小到命名. 好吧, ...
- 无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用。
在删除northwindcs表时,发生报错,消息 3726,级别 16,状态 1,第 2 行,无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用.此时判断是因为有其他表的外键 ...
- JSP 4个域对象-9个内置对象-11个EL隐式对象
一. 四大域对象 1. PageContext :页面范围的数据 2. ServletRequest:请求范围的数据 3. HttpSession:会话范围的数据 4. ServletContext: ...
- FastReport报表对象介绍一:“Text”对象
FastReport中文网 http://www.fastreportcn.com/Article/70.html ------------------------------------------ ...
- jq对象转为dom对象:$(".div1")[0] dom对象转为jq对象:$(dom对象)
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
随机推荐
- 在VMware Workstation上安装CentOS6.5系统步
在VMware Workstation上安装CentOS6.5系统步骤 听语音 | 浏览:147 | 更新:2016-07-28 15:45 | 标签:安装 虚拟机 CENTOS 1 2 3 4 5 ...
- NOIP2015 子串
#149. [NOIP2015]子串 有两个仅包含小写英文字母的字符串 AA 和 BB. 现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的 ...
- Android保存ArrayList至SharedPreferences
保存ArrayList至SharedPreferences 其中ArrayList中每个元素为String List<String> environmentList = new Array ...
- oracle中substr() instr() 用法
--substr(字符串,截取开始位置,截取长度)=返回截取的字 ,) from dual;--返回结果为:m ,) from dual;--返回结果为:m--说明0和1都表示截取的位置为第一个字符 ...
- Nuget自己打包引用的时候出现错误:Package is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package 1.0.1 supports: net (.NETFramework,Version=v0.0)
Nuget自己打包引用的时候出现错误:Package is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package ...
- 【转】【MySql】mysql存储过程中的异常处理
定义异常捕获类型及处理方法: DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement ...
- PhoneGap: Android平台入门例子(Hello World)
Hello World Demo: http://docs.phonegap.com/en/2.0.0/guide_getting-started_android_index.md.html#Gett ...
- Theano2.1.14-基础知识之理解为了速度和正确性的内存别名
来自:http://deeplearning.net/software/theano/tutorial/aliasing.html Understanding Memory Aliasing for ...
- Windows 部署 Redis 群集
1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/redis/releases当前我使用的是 3. ...
- java并发:简单面试问题集锦
多线程:Simultaneous Multithreading,简称SMT. 并行.并发 并行性(parallelism)指两个或两个以上的事件在同一时刻发生,在多道程序环境下,并行性使多个程序同一时 ...