C# IValueConverter介面用法舉例
阿新 • • 發佈:2022-02-05
01
—
介紹
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介面進行轉換。
02
—
舉例
-
介面新增一個表格控制元件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>
IValueConverter介面實現:注意需要將object型別的value轉換為我們的目標型別bool量
public class ShowColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var flag = (bool)value; if (flag) { return "Red"; } else { return "Black"; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
專案原始碼
百度網盤:連結:https://pan.baidu.com/s/1LmBp1XkXIYz01wyrFQIyYQ
提取碼:新增小編獲取
技術群:新增小編微信並備註進群小編微信:mm1552923 公眾號:dotNet程式設計大全