C# IValueConverter接口用法举例


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数据模型定义如下:其中重写了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全部的代码如下:

  •  
                
                    
                    
                        
                            
                                
                            
                        
                    
                    
                
            
    

      定义资源

  •  
            
        
    

    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编程大全