WPF converter(包含传递复杂参数)
單值轉換器
將單一值轉換為特定類型的值,以日期轉換為例如下:
1、定制DateConverter類,其中當值從綁定源傳播給綁定目標時,調用方法Convert。
1 public class DateConverter : IValueConverter2 {
3 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
4 {
5 return ((DateTime)value).ToString("yyyy/MM/dd");
6 }
7
8 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
9 {
10 return null;
11 }
12 }
當值從綁定目標傳播給綁定源時,調用此方法ConvertBack,方法ConvertBack的實現必須是方法Convert的反向實現。例如下:
1 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)2 {
3 DateTime date = (DateTime)value;
4 return date.ToShortDateString();
5 }
6
7 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
8 {
9 string strValue = value as string;
10 DateTime resultDateTime;
11 if (DateTime.TryParse(strValue, out resultDateTime))
12 {
13 return resultDateTime;
14 }
15 return DependencyProperty.UnsetValue;
16 }
返回值DependencyProperty.UnsetValue表示轉換器沒有生成任何值。但是通常情況下方法ConvertBack沒有方法Convert常用,這里不做過多介紹。
2、在xmal文件引用DateConverter類所在命名空間。
1 xmlns:cvt="clr-namespace:ValueConverterDemo.Converter"3、在xaml文件添加Resources。
1 <Window.Resources>2 <cvt:DateConverter x:Key="cvtDate"/>
3 </Window.Resources>
4、在xaml文件中指定Binding值的Converter
1 Text="{Binding CurrentDate, Converter={StaticResource cvtDate}}"效果如下圖,圖中“時間”是未經過轉換的原始DateTime類型,“日期”經過轉換處理后只顯示日期部分。
多值轉換器
將多組值轉換為特定類型的值,以縱橫流量影響交通指示燈顏色的變化為例如下:
當縱向流量大于橫向流量時指示燈應為綠色,當縱向流量小于橫向流量時指示燈應為紅色,否則指示燈為黃色。
1、定制ColorConverter類,此時Convert中參數是object[] values,values[0]對應MultiBinding中的第一個Binding值,這里是縱向流量值,依此類推,可以在MultiBinding對象中指定多個綁定。
1 public class ColorConverter : IMultiValueConverter2 {
3 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
4 {
5 double verValue = (double)values[0];
6 double horValue = (double)values[1];
7 if (verValue > horValue)
8 {
9 return new SolidColorBrush(Colors.Green);
10 }
11 else if (verValue < horValue)
12 {
13 return new SolidColorBrush(Colors.Red);
14 }
15 return new SolidColorBrush(Colors.Yellow);
16 }
17
18 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
19 {
20 return null;
21 }
22 }
2、3步同單值轉換。
4、xmal文件中指定定制的Converter,此時需要使用的MultiBinding來指定多組Binding。
1 <MultiBinding Converter="{StaticResource cvtColor}">2 <Binding Path="Value" ElementName="slVer"/>
3 <Binding Path="Value" ElementName="slHor"/>
4 </MultiBinding>
效果如下圖交通燈的顏色是根據縱向流量和橫向流量的關系而變化的。
- 縱向流量大于橫向流量
- 縱向流量小于橫向流量
- 縱向流量等于橫向流量
?
WPF Converter 使用復雜參數的方法
?
Step 1
在WPF的C#代碼文件中給定義復雜類型的變量,并給其賦值;
Sample code: List<User>lsUser=。。。。
Setp 2
在 C#代碼對應的XAML 中將此復雜參數定義為資源;
Sample code:
<Window ? xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ? xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ? xmlns:c="clr-namespace:SDKSample" ? x:Class="SDKSample.Window1" ? Width="400" ? Height="280" ? Title="MultiBinding Sample"> ??????? ? <Window.Resources> ??? <c:lsUser x:Key="userList"/> ... ? </Window.Resources> ? 這里的命名空間 C 是你的復雜參數所在的命名空間;Step 3
?
? <UserControl.Resources>
??? <app:UserManager x:Key="StaticUsers"/>
??? <app:UserNameConverter? x:Key="UsrConverter"/>
? </UserControl.Resources>
<TextBox? Text="{Binding XXXX,Converter={StaticResource UsrConverter},
? ConverterParameter={StaticResource?userList?}}" />
?
Step 4 Converter 里對參數的使用
?
public class UserNameConverter : IValueConverter
{
??? public object IValueConverter.Convert(object value, Type targetType,object parameter, CultureInfo culture)
??? {
????? List<User> usrs = parameter as List<User>;
????? ...
??? }
}
轉載于:https://www.cnblogs.com/sjqq/p/7942414.html
總結
以上是生活随笔為你收集整理的WPF converter(包含传递复杂参数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么说国家助学贷款是信用贷款
- 下一篇: Study 1 —— HTML5概述