C# IValueConverter接口用法举例

Posted zls366

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>集合;

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

以上是关于C# IValueConverter接口用法举例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IValueConverter 接口在 Windows 商店应用程序中制作货币转换器?

WPF-19 IValueConverter接口

C# 多线程ThreadPool用法举例

C# WPF GridControl用法举例

C# 反射之Activator用法举例

C# WPF开源控件库HandyControl用法举例