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>

 

 WPF MultiBinding 和 IMultiValueConverter

 

Baseprice;Newprice就是数据模型中的实时数据(依赖属性),这样就可以做对比。

当然 这里的Binding 与IValueConverter这里就只用到当个数据绑定,单个对应值转换。

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

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

 

你可能感兴趣的:(Converter)