1. 程式人生 > 其它 >C# IValueConverter介面用法舉例

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程式設計大全