Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理

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的简短文字

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

posted on 2016-01-12 18:45  Chr☆s  阅读(292)  评论(0编辑  收藏  举报