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

希望和大家多多的交流溝通,共同進步。 謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM