WPF实现多值绑定特性以及多值转换
WPF中的实现
我们首先来看一下常规的绑定
<Window x:Class="WpfApplicationSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <!--WPF 单值绑定--> <TextBlock Text="{Binding Title}"></TextBlock> </Grid></Window>
这个很简单,我们几乎不需要做任何解释
接下来看一下WPF中如何进行多值绑定
<Window x:Class="WpfApplicationSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <!--WPF 单值绑定--> <TextBlock Text="{Binding Title}"></TextBlock> <!--WPF 多值绑定,结合StringFormat--> <TextBlock> <TextBlock.Text> <MultiBinding StringFormat=" {0}-{1}"> <Binding Path="Title"></Binding> <Binding Path="Time"></Binding> </MultiBinding> </TextBlock.Text> </TextBlock> </Grid></Window>
这是第一种多值绑定方式,可以直接通过StringFormat格式化多个值,并最终显示在TextBlock中。这种做法,在很多时候,都够用了。
但是,在某些时候,我们可能需要对这些多个值做复杂的处理,光用StringFormat满足不了要求,怎么办呢?
是的,我们会联想到使用ValueConverter。在System.Windows.Data这个命名空间中,我们以前用过一个IValueConverter的接口对吧,那是针对单值绑定的。关于这个接口,更多信息,可以参考 http://msdn.microsoft.com/zh-cn/library/system.windows.data.ivalueconverter.aspx
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;namespace WpfApplicationSample{ /// <summary> /// WPF单值绑定转换器 /// 作者:陈希章 /// </summary> public class TitleConverter:IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //这里实现具体逻辑 throw new NotImplementedException(); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //这里实现具体逻辑 throw new NotImplementedException(); } #endregion }}
既然是这个思路,那么有没有多值转换器呢?答案是有的。请参考
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Data;namespace WpfApplicationSample{ /// <summary> /// WPF单值绑定转换器 /// 作者:陈希章 /// </summary> class MultiValueConverterSample:IMultiValueConverter { #region IMultiValueConverter Members public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //这里实现具体逻辑,请注意第一个参数是一个数组,可以传递多个值 throw new NotImplementedException(); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }}
那么,如何在XAML中使用这个转换器呢?其实和单值转换器是一样的,请参考下面的语法
<Window x:Class="WpfApplicationSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:local="clr-namespace:WpfApplicationSample"> <Window.Resources> <local:MultiValueConverterSample x:Key="cv"></local:MultiValueConverterSample> </Window.Resources> <Grid> <!--WPF 单值绑定--> <TextBlock Text="{Binding Title}"></TextBlock> <!--WPF 多值绑定,结合StringFormat--> <TextBlock> <TextBlock.Text> <MultiBinding StringFormat=" {0}-{1}"> <Binding Path="Title"></Binding> <Binding Path="Time"></Binding> </MultiBinding> </TextBlock.Text> </TextBlock> <!--WPF 多值绑定,结合Converter--> <TextBlock> <TextBlock.Text> <MultiBinding Converter="{StaticResource cv}"> <Binding Path="Title"></Binding> <Binding Path="Time"></Binding> </MultiBinding> </TextBlock.Text> </TextBlock> </Grid></Window>
看起来很好理解,对吧?这是WPF中为我们默认就提供的功能,确实很方便。
但是,这个特性(多值绑定)却没有在Silverlight中实现。
WPF实现多值绑定特性以及多值转换的更多相关文章
- 总结:WPF中MultiBinding多值绑定的方法
原文:总结:WPF中MultiBinding多值绑定的方法 一.Xaml中绑定代码: <TextBlock Grid.Row="5" Grid.Column="3 ...
- WPF多值绑定及多值转换(MultiBinding和IMultiValueConverter)
WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换 例: (1)转换器 public class ContentConverter : IMu ...
- WPF中DatePiker值绑定以及精简查询
WPF中DatePiker值绑定以及精简查询 1.WPF中DatePiker值绑定 Xaml中值绑定使用Text <DatePicker Text="{Binding strMinDa ...
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...
- wpf依赖属性、绑定实现原理、附加属性学习
依赖属性和普通属性相比节省内存的原因:对于普通属性,每个对象有需要存储一个普通属性的值,即便是默认值.而依赖属性的默认值是静态的存储在类中的,所有对象都使用同一默认值,所以对于拥有大量属性的控件来说这 ...
- 利用WPF创建含多种交互特性的无边框窗体
咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...
- C++11新特性:右值引用和转移构造函数
问题背景 #include <iostream> using namespace std; vector<int> doubleValues (const vector< ...
- WPF中,如何将绑定源设置到单件实例
原文:WPF中,如何将绑定源设置到单件实例 WPF中,如何将绑定源设置到单件实例 周银辉 大概两个月前,曾有位朋友问我:如 ...
- WPF——TargetNullValue(如何在绑定空值显示默认字符)
原文:WPF--TargetNullValue(如何在绑定空值显示默认字符) 说明:在数据绑定时,如果有些字段为空值,那么在数据绑定时可以用默认值来显示为空的字段. </Grid> { L ...
随机推荐
- c#如何序列化与反序列化json文件
见网站: http://www.json.org/ 代码如下: /* * Copyright (c) 2013 Calvin Rien * * Based on the JSON parser by ...
- Ubuntu安装pycharm
在安装pycharm之前,想看一下需要安装那些软件. 在安装前先下载软件 JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk ...
- LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods
我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union Al ...
- jdb
http://herongyang.com/jtool/jdb.html http://www.rhcedan.com/2010/06/22/killing-a-java-thread/ 用处:上去杀 ...
- 第四弹:overfeat
overfeat是在AlexNet出现后,推出来的模型,其不仅用于物体分类,来用于定位,检测等,可以说是一个涉及很多应用场景的通用模型,值得看看. 本文将从两个方面来讲解,第一部分从论文角度来说一说, ...
- 全球主流8位MCU芯片详细解剖No.2:英飞凌 XC866 - 全文
[导读] XC866是新型8位微控制器系列(XC800)的第一代系列产品,集成高性能8051核.片内FLASH及功能强大的外设集.此外,XC800系列产品内部集成的片 内振荡器和支持3.3V或5.0V ...
- CodeForces 617A Elephant
C语言语法入门题 #include<cstdio> #include<cstring> #include<vector> #include<cmath> ...
- 控制流(swift)
检测API是否可用 if #available(iOS 9, OSX 10.10, *) { // 在 iOS 使用 iOS 9 APIs , 并且在 OS X 使用 OS X v10.10 APIs ...
- FreeBSD 系统的配置.
SSH 配置 vi /etc/ssh/sshd_config 修改下面的项目 RSAAuthentication yes PermitRootLogin yes PermitEmptypassword ...
- (简单) POJ 3414 Pots,BFS+记录路径。
Description You are given two pots, having the volume of A and B liters respectively. The following ...