在WPF和WIN8中是支持MultiBinding

这个有啥用呢,引用下MSDN的例子http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx:

MultiBinding allows you to bind a binding target property to a list of source properties and then apply logic to produce a value with the given inputs. This example demonstrates how to use MultiBinding.

In the following example, NameListData refers to a collection of PersonName objects, which are objects that contain two properties, firstName and lastName. The following example produces a TextBlock that shows the first and last names of a person with the last name first.

<TextBlock Name="textBox2" DataContext="{StaticResource NameListData}">
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource myNameConverter}"
                  ConverterParameter="FormatLastFirst">
      <Binding Path="FirstName"/>
      <Binding Path="LastName"/>
    </MultiBinding>
  </TextBlock.Text>
</TextBlock>

 
public class NameConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        string name;
 
        switch ((string)parameter)
        {
            case "FormatLastFirst":
                name = values[1] + ", " + values[0];
                break;
            case "FormatNormal":
            default:
                name = values[0] + " " + values[1];
                break;
        }
 
        return name;
    }
 
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        string[] splitValues = ((string)value).Split(' ');
        return splitValues;
    }
}

可惜在wp中这个被砍掉了

想要 MultiBinding 需要自己来实现(方法见高手博客:http://www.devdiv.com/wp_amp_win_-blog-55433-51080.html)

当然也有一个稍微简单点的方法,使用Cimbalino Windows Phone Toolkit(http://cimbalino.org/),Cimbalino Toolkit 的作者为我们提供了一个MultiBindingBehavior,可以比较方便的实现 MultiBinding

下面看一个实例把,这里我们模拟一个显示学生各科成绩的应用,在应用中有一个ListPicker,应用会根据ListPicker的值来作为阈值,对成绩的颜色进行修改,下面是实现:

我们先新建一个wp工程(7.1,8.0都行,Cimbalino toolkit is compatible with the Windows Phone SDK 7.1.x and Windows Phone 8.0,这里我用7.1的,主要是机器不行,8.0的模拟器太卡…)

添加成绩类:

namespace PhoneIValueConverterMultibinding1
{
    public class Score
    {
        public string name { get; set; }
        public int number { get; set; }
    }
}

在工程中添加Cimbalino Windows Phone Toolkit

然后定义我们的颜色转换类(由于我没用双向绑定,所以没写ConvertBack…):

using System;
using System.Windows.Media;
using System.Globalization;
using Cimbalino.Phone.Toolkit.Converters;
namespace PhoneIValueConverterMultibinding1
{
    public class ColorChange : MultiValueConverterBase 
    {
        public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values.Length < 2)
            {
                return new SolidColorBrush(Colors.White);
            }
 
            if ((values[0] != null) && (values[1] != null))
            {
                //根据输入,判断返回值
                try
                {
                    int limitnumber = System.Convert.ToInt32((string)values[0]);
                    int studentscore = (int)values[1];
 
                    if (limitnumber < studentscore)
                    {
                        return new SolidColorBrush(Colors.Red);
                    }
                    else
                    {
                        return new SolidColorBrush(Colors.Green);
                    }
                }
                catch (FormatException)
                {
                    return new SolidColorBrush(Colors.White);
                }
                catch (Exception)
                {
                    return new SolidColorBrush(Colors.White);
                }
            }
            else
            {
                return new SolidColorBrush(Colors.White);
            }       
        }
 
        public override object[] ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

然后在xaml里添加引用:

    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:Local="clr-namespace:PhoneIValueConverterMultibinding1"
    xmlns:cimbalinoBehaviors="clr-namespace:Cimbalino.Phone.Toolkit.Behaviors;assembly=Cimbalino.Phone.Toolkit"

添加ListPicker

                <toolkit:ListPicker Header="成绩阈值" Name="listpicker1" SelectionChanged="listpicker1_SelectionChanged">
                    <toolkit:ListPickerItem Content="50" />
                    <toolkit:ListPickerItem Content="60" />
                    <toolkit:ListPickerItem Content="70" />
                    <toolkit:ListPickerItem Content="80" />
                    <toolkit:ListPickerItem Content="90" />
                </toolkit:ListPicker>

添加页面资源

    <phone:PhoneApplicationPage.Resources>
<Local:ColorChange x:Key="ColorConverter" />
</phone:PhoneApplicationPage.Resources>

然后添加绑定的listbox,并在其中添加MultiBindingBehavior ,因为我们要改变的是文字的颜色,所以设置PropertyName="Foreground"

                <ListBox Height="510" Name="lb1" Margin="12,12,0,0" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Width="432" Orientation="Horizontal">
                                <TextBlock TextWrapping="Wrap" Text="{Binding name}" FontSize="32" Width="200" />
                                <TextBlock TextWrapping="Wrap" Text="{Binding number}" FontSize="32" Margin="0" >
                                        <i:Interaction.Behaviors>
                                            <cimbalinoBehaviors:MultiBindingBehavior Converter="{StaticResource ColorConverter}" PropertyName="Foreground"  >                                                
                                                <cimbalinoBehaviors:MultiBindingItem Value="{Binding ElementName=listpicker1, Path=SelectedItem.Content}" />             
                                                <cimbalinoBehaviors:MultiBindingItem Value="{Binding number}" />
                                            </cimbalinoBehaviors:MultiBindingBehavior>
                                        </i:Interaction.Behaviors>
                                </TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>                    
                </ListBox>

最后数据绑定:

        ObservableCollection<Score> StudentScore = new ObservableCollection<Score>();
 
        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            StudentScore.Add(new Score { name = "语文", number = 55 });
            StudentScore.Add(new Score { name = "数学", number = 66 });
            StudentScore.Add(new Score { name = "英语", number = 76 });
            StudentScore.Add(new Score { name = "物理", number = 72 });
            StudentScore.Add(new Score { name = "化学", number = 97 });
            StudentScore.Add(new Score { name = "生物", number = 86 });
            StudentScore.Add(new Score { name = "地理", number = 68 });
            StudentScore.Add(new Score { name = "历史", number = 95 });
            StudentScore.Add(new Score { name = "政治", number = 39 });
  }
 
        private void listpicker1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (listpicker1 != null)
            {
                if (listpicker1.SelectedIndex != -1)
                {
                    lb1.ItemsSource = StudentScore;
                }
            }            
        }

看看效果:

最后说下Ms强烈建议不要在复杂绑定中是使用Converter

另外Cimbalino Windows Phone Toolkit还有许多其他的功能

大家可以试试

源码:

参考:

http://msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx

https://github.com/Cimbalino/Cimbalino-Phone-Toolkit

http://www.pedrolamas.com/2013/05/17/cimbalino-windows-phone-toolkit-multibindingbehavior/

Windows Phone MultiBinding :Cimbalino Toolkit的更多相关文章

  1. 2016 windows安装phing:安装成功

    21:39 2016/7/212016 windows安装phing:安装成功注意:出现错误时就去更新pear:参见:http://www.cnblogs.com/pinnasky/archive/2 ...

  2. Windows mysql提示:1045 access denied for user 'root'@'localhost' using password yes

    Windows mysql提示:1045 access denied for user 'root'@'localhost' using password yes http://blog.csdn.n ...

  3. Windows服务一:新建Windows服务、安装、卸载服务

    Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面 ...

  4. zabbix windows angent安装:

    zabbix windows angent安装:1.下载zabbix agent for windows客户端,直接解压到C盘下.C:\zabbix 的目录015/04/21 11:16 <DI ...

  5. windows phone8.1:Xml,Json序列化和反序列化

    原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...

  6. 老司机实战Windows Server Docker:2 docker化现有iis应用的正确姿势

    前言 上一篇老司机实战Windows Server Docker:1 初体验之各种填坑介绍了安装docker服务过程中的一些小坑.这一篇,我们来填一些稍大一些的坑:如何docker化一个现有的iis应 ...

  7. 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)

    经过上两篇实战Windows Server Docker系列文章,大家对安装Windows Docker服务以及如何打包现有IIS应用为docker镜像已经有了基本认识.接下来我们来简单讲讲一些最基本 ...

  8. 老司机实战Windows Server Docker:5 Windows Server Dockerfile葵花宝典

    前面两篇(简单运维1.简单运维2)介绍了一些Windows Server Docker相关的基本运维知识.今天这一篇,Windows Server Dockerfile葵花宝典,涵盖了许多典型场景的W ...

  9. 自动化测试框架【windows版】:JMeter + Ant + Jenkins

    前提条件:windows安装了jmeter.ant.jenkins 安装方法参考汇总目录中对应的博文 截图看不清的,可以调大浏览器倍数看 jenkins驱动ant执行,ant驱动jmeter执行 an ...

随机推荐

  1. V4L2开发要点【转】

    转自:https://blog.csdn.net/mr_raptor/article/details/7441141 首先来看 Read/Write ,如果 VIDIOC_QUERYCAP 调用返回的 ...

  2. configparser模块--配置文件

    该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值). 创建文件 import configparser config = ...

  3. WARN: Establishing SSL connection

    在我们使用连接MySQL数据库时会出现这样的提示: Tue Aug 29 13:24:29 CST 2017 WARN: Establishing SSL connection without ser ...

  4. shell中的dd命令使用详解

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  5. ABP 框架从源码学习——abp框架启动和结束(1)

       1.abp框架的启动是从Global.asax文件的Application_Start启动的,当然代表Global的application必须从AbpWebApplication继承: publ ...

  6. $Django 路飞学城项目简介

    - 基于极验实现动态验证码 - 在线视频播放:cc,HTML用的Flash - 基于Rest Framework实现 API接口 - 自定义rest认证token 认证 - 序列化以及自定义验证对请求 ...

  7. appium+java (六) 手机chrome浏览器操作

    一.前言 早之前写过一段时间的appium for native app(即原生app脚本),但尴尬的是从未写过类似的文章,后期有时间我会陆续接着写,近一阶段有时间又把appium捡起来了,由于公司产 ...

  8. spring3.0+Atomikos 构建jta的分布式事务

    摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...

  9. redhat7.3安装yum源

    #检查rehat自带的yum源[root@localhost ~]# rpm -qa | grep yum -.el7.noarch -.el7.noarch -.el7.noarch -.el7.n ...

  10. pytorch中的 requires_grad和volatile

    https://blog.csdn.net/u012436149/article/details/66971822 简单总结其用途 (1)requires_grad=Fasle时不需要更新梯度, 适用 ...