背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue
作者:webabcd
介绍
背水一战 Windows 10 之 绑定
- 与 Element 绑定
- 与 Indexer 绑定
- TargetNullValue - 当绑定数据为 null 时显示的值
- FallbackValue - 当绑定失败时显示的值
示例
1、演示如何与 Element 绑定
Bind/BindingElement.xaml
- <Page
- x:Class="Windows10.Bind.BindingElement"
- 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">
- <!--
- 本例用于演示如何与 Element 绑定,以及 OneTime, OneWay, TwoWay 的区别
- -->
- <!--
- OneTime 方式绑定元素
- -->
- <TextBox Text="{Binding ElementName=txtOneTime, Path=Text, Mode=OneTime}" />
- <TextBox Name="txtOneTime" Text="OneTime" Margin="0 10 0 0" />
- <!--
- OneWay 方式绑定元素(OneWay 是默认方式)
- -->
- <TextBox Text="{Binding ElementName=txtOneWay, Path=Text, Mode=OneWay}" Margin="0 30 0 0" />
- <TextBox Name="txtOneWay" Text="OneWay" Margin="0 10 0 0" />
- <!--
- TwoWay 方式绑定元素(同时演示一下 Binding 标记的另一种写法,就是直接把 Path 指定的路径放到 Binding 的后面)
- -->
- <TextBox Text="{Binding Text, ElementName=txtTwoWay, Mode=TwoWay}" Margin="0 30 0 0" />
- <TextBox Name="txtTwoWay" Text="TwoWay" Margin="0 10 0 0" />
- <!--
- TwoWay 方式绑定元素(在 C# 端指定 Binding 对象的方式一)
- -->
- <TextBox Name="textBox1" Margin="0 30 0 0" />
- <TextBox Name="textBox2" Text="TwoWay" Margin="0 10 0 0" />
- <!--
- TwoWay 方式绑定元素(在 C# 端指定 Binding 对象的方式二)
- -->
- <TextBox Name="textBox3" Margin="0 30 0 0" />
- <TextBox Name="textBox4" Text="TwoWay" Margin="0 10 0 0" />
- </StackPanel>
- </Grid>
- </Page>
Bind/BindingElement.xaml.cs
- /*
- * 演示如何与 Element 绑定
- */
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows.UI.Xaml.Data;
- namespace Windows10.Bind
- {
- public sealed partial class BindingElement : Page
- {
- public BindingElement()
- {
- this.InitializeComponent();
- SetBindingDemo1();
- SetBindingDemo2();
- }
- // 在 C# 端做绑定(方式一)
- private void SetBindingDemo1()
- {
- // 实例化 Binding 对象
- Binding binding = new Binding()
- {
- ElementName = nameof(textBox2),
- Path = new PropertyPath(nameof(TextBox.Text)),
- Mode = BindingMode.TwoWay // 默认是 OneWay 的
- };
- // 将目标对象的目标属性与指定的 Binding 对象关联
- BindingOperations.SetBinding(textBox1, TextBox.TextProperty, binding);
- }
- // 在 C# 端做绑定(方式二)
- private void SetBindingDemo2()
- {
- // 实例化 Binding 对象
- Binding binding = new Binding()
- {
- ElementName = nameof(textBox4),
- Path = new PropertyPath(nameof(TextBox.Text)),
- Mode = BindingMode.TwoWay // 默认是 OneWay 的
- };
- // 将目标对象的目标属性与指定的 Binding 对象关联
- textBox3.SetBinding(TextBox.TextProperty, binding);
- }
- }
- }
2、演示如何与 Indexer 绑定
Bind/BindingIndexer.xaml
- <Page
- x:Class="Windows10.Bind.BindingIndexer"
- 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="textBlock" Text="{Binding Path=[3]}" />
- <!--演示如何绑定集合中的某个对象的某个属性-->
- <TextBlock Name="textBlock2" Text="{Binding Path=[5].Name}" Margin="0 10 0 0" />
- <!--演示如何绑定 string 类型的索引器-->
- <TextBlock Name="textBlock3" Text="{Binding Path=[webabcd]}" Margin="0 10 0 0" />
- <!--演示如何绑定字典表中指定 key 的数据-->
- <TextBlock Name="textBlock4" Text="{Binding Path=[hello]}" Margin="0 10 0 0" />
- <!--演示如何在 C# 端绑定索引器-->
- <TextBox Name="textBox" Margin="0 10 0 0" />
- </StackPanel>
- </Grid>
- </Page>
Bind/BindingIndexer.xaml.cs
- /*
- * 演示如何与 Indexer 绑定
- */
- using System;
- using System.Collections.Generic;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows.UI.Xaml.Data;
- using Windows10.Common;
- namespace Windows10.Bind
- {
- public sealed partial class BindingIndexer : Page
- {
- public BindingIndexer()
- {
- this.InitializeComponent();
- this.Loaded += BindingIndexer_Loaded;
- BindingDemo();
- }
- private void BindingIndexer_Loaded(object sender, RoutedEventArgs e)
- {
- // 用于演示如何绑定集合中的某个元素
- List<string> list = new List<string>();
- for (int i = ; i < ; i++)
- {
- list.Add("索引:" + i.ToString());
- }
- textBlock.DataContext = list;
- // 用于演示如何绑定集合中的某个对象的某个属性
- textBlock2.DataContext = TestData.GetEmployees();
- // 用于演示如何绑定 string 类型的索引器
- textBlock3.DataContext = this;
- // 用于演示如何绑定字典表中指定 key 的数据
- Dictionary<string, string> dic = new Dictionary<string, string>() { { "hello", "hello webabcd" } };
- textBlock4.DataContext = dic;
- }
- // 自定义一个索引器
- public object this[string indexer]
- {
- get
- {
- return "string: " + indexer;
- }
- }
- // 在 C# 端绑定索引器
- private void BindingDemo()
- {
- textBox.DataContext = this;
- // 实例化 Binding 对象
- Binding binding = new Binding()
- {
- Path = new PropertyPath("[wanglei]")
- };
- // 将目标对象的目标属性与指定的 Binding 对象关联
- BindingOperations.SetBinding(textBox, TextBox.TextProperty, binding);
- /*
- * 注:经测试在 TextBox 做如上绑定是正常的。但是如果在 TextBlock 做如上绑定则运行时报错 Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 不知道为什么
- */
- }
- }
- }
3、演示 Binding 中的 TargetNullValue 和 FallbackValue 的用法
Bind/TargetNullValueFallbackValue.xaml
- <Page
- x:Class="Windows10.Bind.TargetNullValueFallbackValue"
- 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">
- <!--
- FallbackValue - 当绑定失败时显示的值
- -->
- <TextBlock Name="textBlock1" Text="{Binding Path=MyName, FallbackValue='绑定失败时的默认值'}" Margin="5" />
- <!--
- TargetNullValue - 当绑定数据为 null 时显示的值
- -->
- <TextBlock Name="textBlock2" Text="{Binding Path=MyName, TargetNullValue='绑定数据的返回值为 null'}" Margin="5" />
- </StackPanel>
- </Grid>
- </Page>
Bind/TargetNullValueFallbackValue.xaml.cs
- /*
- * 演示 Binding 中的 TargetNullValue 和 FallbackValue 的用法
- */
- using Windows.UI.Xaml.Controls;
- using Windows.UI.Xaml.Navigation;
- namespace Windows10.Bind
- {
- public sealed partial class TargetNullValueFallbackValue : Page
- {
- public TargetNullValueFallbackValue()
- {
- this.InitializeComponent();
- }
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- // 为 textBlock2 提供数据上下文
- textBlock2.DataContext = this;
- /*
- // 实例化 Binding 对象
- Binding binding = new Binding()
- {
- Path = new PropertyPath("Name"),
- TargetNullValue = "TargetNullValue",
- FallbackValue = "FallbackValue"
- };
- // 将目标对象的目标属性与指定的 Binding 对象关联
- BindingOperations.SetBinding(textBlock2, TextBox.TextProperty, binding);
- */
- }
- public string MyName { get; set; } = null;
- }
- }
OK
[源码下载]
背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue的更多相关文章
- 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧
[源码下载] 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧 作者:webabcd 介绍背水一战 Wind ...
- 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合
[源码下载] 背水一战 Windows 10 (22) - 绑定: 通过 Binding 绑定对象, 通过 x:Bind 绑定对象, 通过 Binding 绑定集合, 通过 x:Bind 绑定集合 作 ...
- 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换
[源码下载] 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换 作者:webabcd 介 ...
- 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定
[源码下载] 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定 作者:we ...
- 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout
[源码下载] 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout 作者:webabcd 介绍背水一战 Windows 10 之 ...
- 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox
[源码下载] 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(选择类) Sel ...
- 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter
[源码下载] 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter 作者:weba ...
- 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton
[源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...
- 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null
[源码下载] 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null 作者:webabcd 介绍背水一战 Windows 10 之 XAML ...
随机推荐
- JavaScript面向对象之我见
序言 在JavaScript的大世界里讨论面向对象,都要提到两点:1.JavaScript是一门基于原型的面向对象语言 2.模拟类语言的面向对象方式.对于为什么要模拟类语言的面向对象,我个人认为:某些 ...
- lua中清空目录和递归创建目录
lua中的 lfs.mkdir lfs.rmdir只能针对单个目录,且lfs.rmdir不能清空文件夹 于是我想到了使用os.execute 递归创建目录如下os.execute("mkdi ...
- Mongodb 学习笔记
Mongo DB NoSql简介 MongoDB简介 在Windows平台下安装Mongo Mongo DB官方文档 MongoDB基本命令 MongoDB的默认安装路径为 C:\Program Fi ...
- Azure PowerShell (4) 使用PowerShell管理多个订阅
<Windows Azure Platform 系列文章目录> 笔者手上有两个Azure账户. - Azure Global (windowsazure.com)账户.有两个订阅. - 世 ...
- 《JS修炼之道》—— 读后总结
本篇是基于<JS修炼之道>的记录性与总结性的文章,这本书从多种框架的角度,讲述了JS开发中的一些实用技巧. 比如Prototype,JQuery,Mootools,YUI,Dojo,Ext ...
- PHP 数据访问
如何连接 1.造连接对象 $db= new MySQLi("localhost","root","123","mydb" ...
- android studio和eclipse中如何获取sha1值
首先如果是eclipse的话, 直接打开eclipse开发工具 那么接下来问题来了,现在很多开发者都已经从es转型到as开发工具了, 在android studio上没有直接提供这个GUI界面让我们去 ...
- GUID简介
GUID (全局唯一标识符) 编辑 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点. ...
- php 操作数组(合并,拆分,追加,查找,删除等)(转载)
1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: array array_merg ...
- WPF绘制折线
WPF后台绘制折线,填充到一个GRID下 private void btnPreview_Click(object sender, RoutedEventArgs e) { GridImg.Child ...