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的簡短文字
希望和大家多多的交流溝通,共同進步。 謝謝!