zoukankan      html  css  js  c++  java
  • 【转】WPF MultiBinding 和 IMultiValueConverter

    WPF MultiBinding 和 IMultiValueConverter

    MultiBinding,描述附加到单个绑定目标属性的Binding对象的集合。可以指定多个数值绑定。

    IMultiValueConverter通过转换器使用MultiBingding对象,该对象讲根据这些绑定的值转换生成绑定目标的最终值(效果)。

    可以看一下微软给出的案例:

     1 public class NameConverter : IMultiValueConverter
     2 {
     3     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
     4     {
     5         string name;
     6 
     7         switch ((string)parameter)
     8         {
     9             case "FormatLastFirst":
    10                 name = values[1] + ", " + values[0];
    11                 break;
    12             case "FormatNormal":
    13             default:
    14                 name = values[0] + " " + values[1];
    15                 break;
    16         }
    17 
    18         return name;
    19     }
    20 
    21     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    22     {
    23         string[] splitValues = ((string)value).Split(' ');
    24         return splitValues;
    25     }
    26 }

    在资源中定义引用转换

    1 <c:NameConverter x:Key="myNameConverter"/>
    1 <TextBlock Name="textBox2" DataContext="{StaticResource NameListData}">
    2   <TextBlock.Text>
    3     <MultiBinding Converter="{StaticResource myNameConverter}"
    4                   ConverterParameter="FormatLastFirst">
    5       <Binding Path="FirstName"/>
    6       <Binding Path="LastName"/>
    7     </MultiBinding>
    8   </TextBlock.Text>
    9 </TextBlock>

    Orlando Bloom Bloom, Orlando

    亦或者 如果股票买卖数据中需要定义 红涨绿跌 ,则会对比昨收价对比实时价格

     1 public class QDataColorConvert : IMultiValueConverter
     2     {
     3         /// 需传入一组对象,(基础值 比对值)
     4         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     5         {
     6             double proNum = Math.Round((double)values[1], 2);//目前实时阶段性价格
     7             double basepronum = Math.Round((double)values[0], 2);//昨收价格
     8 
     9             if (proNum > basepronum)
    10             {
    11                 return new SolidColorBrush(Color.FromArgb(255, 255, 96, 96));
    12             }
    13             else if (proNum < basepronum)
    14             {
    15                 return new SolidColorBrush(Color.FromArgb(255, 83, 187, 108));
    16             }
    17             return new SolidColorBrush(Color.FromArgb(255, 227, 227, 227));
    18         }
    19 
    20         public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    21         {
    22             throw new NotImplementedException();
    23         }
    24     }

    如何使用呢?

     1 <C:QDataColorConvert x:Key="Qdataconverter"/>
     2 
     3 <TextBlock Text="{Binding Path=Newprice}">
     4 <TextBlock.Foreground>
     5    <MultiBinding  Converter="{StaticResource Qdataconverter}">
     6       <Binding Path="Baseprice"/>
     7       <Binding Path="Newprice"/>
     8    </MultiBinding>
     9 </TextBlock.Foreground>
    10</TextBlock>

    Baseprice;Newprice就是数据模型中的实时数据(依赖属性),这样就可以做对比。
    
    当然 这里的Binding 与IValueConverter这里就只用到当个数据绑定,单个对应值转换。
    
    

    这个就是介绍的WPF的MultiBinding 和 IMultiValueConverter的简短文字

    希望和大家多多的交流沟通,共同进步。 谢谢!

  • 相关阅读:
    PYTHON-文件指针的移动,移动和函数基础
    PYTHON-字符编码&文件处理-练习
    PYTHON-基本数据类型-元祖类型,字典类型,集合类型-练习
    PYTHON-字符编码
    PYTHON-基本数据类型-数字类型,字符串类型,列表类型-练习
    PYTHON-基本数据类型-元祖类型,字典类型,集合类型
    English trip EM2-PE-1B Teacher:Patirck
    English trip V1
    English trip V1
    English trip V1
  • 原文地址:https://www.cnblogs.com/chriskwok/p/5125299.html
Copyright © 2011-2022 走看看