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

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

转载于:https://www.cnblogs.com/chriskwok/p/5125299.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF的多值绑定(MultiBinding)和多值换(IMultiValueConverter)功能可以使我们将多个数据源绑定到单个控件上,并将多个值换为单个值。在本文中,我们将简单地介绍这两个功能。 ## 多值绑定(MultiBinding) 多值绑定(MultiBinding)允许我们将多个数据源绑定到单个控件上。使用多值绑定,我们可以将多个值绑定到一个控件上,例如将多个文本框的值绑定到一个标签上。 在XAML中,我们可以使用`MultiBinding`和`Binding`标记来实现多值绑定。下面是一个示例: ``` <TextBlock> <TextBlock.Text> <MultiBinding Converter="{StaticResource myMultiValueConverter}"> <Binding Path="FirstName" /> <Binding Path="LastName" /> </MultiBinding> </TextBlock.Text> </TextBlock> ``` 在上面的示例中,我们绑定了两个数据源(`FirstName`和`LastName`),并使用了`myMultiValueConverter`换器将它们合并为一个字符串。 ## 多值换(IMultiValueConverter) 多值换器(IMultiValueConverter)允许我们将多个值换为单个值。使用多值换器,我们可以将多个数据源的值合并为一个值,例如将名字和姓氏合并为一个字符串。 在实现多值换器时,我们需要实现`IMultiValueConverter`接口,并实现其中的`Convert`和`ConvertBack`方法。下面是一个示例: ``` public class MyMultiValueConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { string firstName = values[0].ToString(); string lastName = values[1].ToString(); return $"{firstName} {lastName}"; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } ``` 在上面的示例中,我们实现了`Convert`方法,将多个值合并为一个字符串,并在XAML中使用它来绑定文本控件的文本属性。 ``` <TextBlock> <TextBlock.Text> <MultiBinding Converter="{StaticResource myMultiValueConverter}"> <Binding Path="FirstName" /> <Binding Path="LastName" /> </MultiBinding> </TextBlock.Text> </TextBlock> ``` 这样就可以将FirstName和LastName合并为一个字符串,并将其显示在TextBlock中。 总结一下,WPF的多值绑定和多值换功能非常强大,可以让我们轻松地将多个数据源绑定到单个控件上,并将它们换为单个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值