介绍 IValueConverter接口位于名称空间System.Windows.Data,接口定义了Convert和ConvertBack两组方法: public interface IValueConverter { object Convert(object value, Type targetType, object parameter, CultureInfo culture); object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture); } }
在界面控件所需数据类型或格式和后台绑定的数据不一致时,往往需要借助IValueConverter接口进行转换。 举例 界面添加一个表格控件datagrid,绑定数据结构StudentList,StudentList这是一个ObservableCollection<Students>集合; Students数据模型定义如下:其中重写了ToString方法,并定义了四个属性,分别是Id,Name ,Age 和AgeValidate ,AgeValidate 用来验证数据,即年龄小于16或者大于21,时界面字体显示红色 [AddINotifyPropertyChangedInterface] public class Students { private int id; public int Id { get { return id; } set { id = value; } } public string Name { get; set; }
private int age; public int Age { get { return age; } set { age = value; if(age < 16 || age > 21 ) { AgeValidate = true; } else { AgeValidate = false; } } }
public bool AgeValidate { get; set; } public override string ToString() { StringBuilder report = new StringBuilder(); report.AppendLine($"[Id] = [{Id}]"); report.AppendLine($"[Name] = [{Name}]"); report.AppendLine($"[Age] = [{Age}]"); report.AppendLine($"[AgeValidate] = [{AgeValidate}]"); return report.ToString(); } }
界面前台绑定:主要是通过这句 Foreground="{Binding AgeValidate,Converter={StaticResource ShowColorConverter}}"
datagrid全部的代码如下: <DataGrid Name="dgSourceData" AutoGenerateColumns="False" ItemsSource="{Binding StudentList}" ContextMenu="{Binding menu1}" RowHeaderWidth="30" SelectedItem ="{Binding SelectedItems}" SelectionMode="Single" SelectionUnit="Cell" cal:Message.Attach="[Event SelectionChanged]=[GridControl_SelectionChanged($source,$eventArgs)];" CellEditEnding="dgSourceData_BeginningEdit" SelectionChanged="dgSourceData_SelectionChanged" > <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{ Binding Path=Name}" MinWidth="68"/> <DataGridTemplateColumn Header="Age" MinWidth="68" > <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBox Text="{Binding Path=Age,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Foreground="{Binding AgeValidate,Converter={StaticResource ShowColorConverter}}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <DataGridTextColumn Header="Id" Binding="{ Binding Path=Id}" MinWidth="48"/> </DataGrid.Columns> </DataGrid>
定义资源
<UserControl.Resources> <converters:ShowColorConverter x:Key="ShowColorConverter" /> </UserControl.Resources>
运行演示
|