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 ...
随机推荐
- Hadoop远程调用机制
- git版本控制(一)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- java中堆和堆栈的区别
java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...
- hibernate---一对一单向外键关联--XML
Student.java: package com.bjsxt.hibernate; public class Student { private int id; private String nam ...
- JavaScript(二)---- 变量、数据类型和运算符
变量 javaScript中的变量变量是弱类型的,用var来声明. javascript的变量声明格式: var 变量名 = 数据; 声明变量要注意的事项: 1. 在javascript中声明变量是 ...
- 单向链表(C#)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Xcode模拟网络状态
http://www.it165.net/pro/html/201508/50571.html
- (简单) POJ 1426 Find The Multiple,BFS+同余。
Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...
- HDU 5651 xiaoxin juju needs help
组合数杨辉三角打表,这样避免了除法求逆元. #include<cstdio> #include<cstring> #include<cmath> #include& ...
- mysql 不同语法
http://blog.csdn.net/kesaihao862/article/details/6718443 REPLACE INTO id_28_repayid(stub) VALUES(1); ...