首页 > 代码库 > 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的简短文字

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

 

WPF MultiBinding 和 IMultiValueConverter