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的简短文字
希望和大家多多的交流沟通,共同进步。 谢谢!