`

WPF 格式化输出- IValueConverter接口的使用

wpf 
阅读更多
以前在用ASP.NET 做B/S系统时,可以方便地在GRIDVIEW DATAList等数据控件中,使用自定义的代码逻辑,比如
使用 <%# GetBalance(custID) %> 这样的调用, GetBalance()为在codebehind类中定义的方法;
在WPF应用程序中有时也有类似的需求,比如数据库表Teacher中有一个字段 Title ,int 类型,取值为1-5,分别对应讲师  研究员 高工  副教授 教授 。在wpf窗口中需要直接显示 讲师 研究员 类似的文字,而不是一个1-5的数字,从界面设计的角度 ,用文字来表示职称是最自然的方式。因此在数据绑定的时候需要将整数转换为对应的文本职称。 但是WPF没有象ASP。NET那样的绑定表达式用法;该怎么办呢?

WPF框架提供了一个IValueConverter接口,负责数据源到数据控件绑定时,自定义转换逻辑。使用它包括以下步骤:
1.创建一个只转换器类,实现该接口;
2.给该类加入ValueConversion属性,并制定源类型和目标类型;
3.实现该接口的两个方法,Convert()与ConvertBack()
4.按照1-3创建类之后,在数据绑定控件中,设定Converter为该类的一个实例;

具体要完成上述功能:
1.首先创建实现 IValueConverter的类:
//指定转换器源类型和目标类型
[ValueConversion(typeof(int), typeof(string))]
   public class TitleConverter:IValueConverter
    {
     

       //实现接口的两个方法
        #region IValueConverter 成员
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int titleInt = (int)value;
            string titleStr = string.Empty;
            switch (titleInt)
            {
                case 5:
                    titleStr = "教授";
                    break;
                case  4:
                    titleStr = "副教授";
                    break;
                case 3:
                    titleStr = "高工";
                    break;
                case 2:
                    titleStr = "研究员";
                    break;
                case 1:
                    titleStr = "讲师";
                    break;
          
            }

            return titleStr;
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string titleStr = value.ToString();
            int titleInt = 0;
            switch (titleStr)
            {
                case "教授":
                    titleInt = 5;
                    break;
                case "副教授":
                    titleInt = 4;
                    break;
                case "高工":
                    titleInt = 3;
                    break;
                case "研究员":
                    titleInt = 2;
                    break;
                case "讲师":
                    titleInt = 1;
                    break;
          
          
            }
            return titleInt;
        }
        #endregion
    }
2.前台调用
首先需要在窗口中声明转换器类名称空间 并定义一个转换器资源
<Window x:Class="EvalStarServer.UserManage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:EvalStarServer.BLL"
        Title="UserManage" >
    <Window.Resources>
        <local:TitleConverter x:Key="myTitleConverter"></local:TitleConverter>
    </Window.Resources>
<DataGrid Name="gdEvaluator" CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="姓名" Binding="{Binding Path=Name}"></DataGridTextColumn>                
                    <DataGridTextColumn Header="职称" Binding="{Binding Path=Elevel,Converter={StaticResource myTitleConverter}}"></DataGridTextColumn>
                    <DataGridTextColumn Header="编号" Binding="{Binding Path=Eno}"></DataGridTextColumn>
                    <DataGridTemplateColumn Header="操作">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Tag="{Binding Path=ID}"  Click="OnDeleteEvl">删除</Button>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

</Windows>

这样就实现了前台根据数据中的整数 显示不同的职称。
分享到:
评论

相关推荐

    WPF 数据.pdf

    - 使用`ICollectionView`接口的`MoveCurrentToNext`或`MoveCurrentToPrevious`方法。 - 示例: ```csharp collectionView.MoveCurrentToNext(); ``` #### 18. 筛选视图中的数据 - **定义**: 对视图中的数据应用...

    WPF自定义样式W:TabControlTest,倒计时,数字加减文本框,WPF圆形图像

    例如,我们可以用IValueConverter接口实现自定义转换器,处理数据类型转换或格式化。 **ComboBoxImage(Comboximage)**是指在ComboBox中展示图像的技巧。WPF的ComboBox不仅可以显示文本,还可以通过数据模板...

    WPF UnitTest Demo

    6. **Converters** - IValueConverter或IMultiValueConverter,用于转换数据格式或提供UI呈现逻辑。测试转换器确保它们在不同输入下返回正确的输出。 为了有效地进行这些测试,开发者通常会利用以下测试框架: - *...

    使用绑定进行WPF DataGrid格式化的指南

    3. **条件格式化**:通过使用数据触发器(`DataTrigger`)和模板选择器(`DataTemplateSelector`),你可以根据数据值来改变单元格的样式。例如,可以设置一个触发器,当数据项的某个属性值满足特定条件时,改变...

    WPF绑定操作解析数据

    为了使数据源能够通知WPF框架其属性已改变,应实现INotifyPropertyChanged接口。当属性值更改时,触发PropertyChanged事件,这样绑定系统就能检测到并更新相应的UI。 8. **依赖属性(DependencyProperty)** 对于...

    WPF mvvm数据绑定

    `IValueConverter`接口允许自定义转换,将数据源的值转换为适合显示的格式,或者将视图的输入转换为数据源可以理解的值。例如,日期字符串转换为DateTime对象。 ### 6. 事件绑定 在MVVM中,`ICommand`接口用于处理...

    wpf+visifire+数据绑定

    5. **转换器**:有时需要将源数据转换为适合显示的格式,这时可以使用IValueConverter接口实现自定义转换器。 6. **双向绑定**:默认情况下,数据绑定是单向的,但通过设置可以实现双向绑定,让UI和数据源之间的变化...

    WPF xaml数据绑定

    `StringFormat`用于格式化`UserAge`的显示。 **文件结构与作用** 在提供的文件列表中,我们可以看到以下几个关键文件: 1. **App.config**:应用程序的配置文件,可能包含数据库连接字符串或其他应用设置。 2. **...

    WPF界面数据绑定例子

    这时可以使用`IValueConverter`接口实现自定义转换器。 5. **双向绑定**:默认情况下,绑定是单向的,即从数据源到UI。但双向绑定允许UI的改变反向更新数据源,常用于`TextBox`等输入控件。 ```xml , Mode=TwoWay}...

    wpf 前台绑定

    这时我们可以使用`IValueConverter`接口创建自定义转换器,并在绑定表达式中指定: ```xml , Converter={StaticResource AgeConverter}, Mode=TwoWay}" /&gt; ``` ### 事件触发更新 虽然双向绑定可以自动处理大部分...

    WPF自定义曲线表

    我们可以将坐标列表绑定到Path元素的Data属性,然后通过某种转换器(如`IValueConverter`)将坐标点列表转换为适当的PathGeometry数据格式。 为了实现交互性,可能还需要添加事件处理程序,比如鼠标点击事件,使得...

    WPF绑定讲解

    数据转换器接收源数据并返回转换后的结果,例如将数值转换为颜色,或者将日期格式化。 **绑定方式** WPF提供了多种绑定方式,包括单向绑定(只从源到目标)、双向绑定(源和目标间互相更新)和OneTime、...

    wpf多语言的实现

    2. **数据绑定和转换器**:使用`IValueConverter`可以处理更复杂的本地化需求,例如日期和数字格式。 3. **动态资源与静态资源**:`x:Static`用于静态资源,意味着在编译时确定资源值;而数据绑定到动态资源则允许...

    WPF绑定入门;必知必会!

    有时需要在数据源和UI之间进行转换,比如单位转换、格式化日期等。这时可以使用`IValueConverter`接口实现自定义转换器,并在绑定中指定。 ```xml , Converter={StaticResource DateConverter}}" /&gt; ``` ### 6. ...

    WPF_DataBinding.rar

    使用`IValueConverter`接口,可以自定义数据绑定的转换过程,例如将数据库中的整数年龄转换为字符串显示。 ### 7. 绑定上下文(DataContext) DataContext是WPF中非常重要的概念,它是决定哪个对象作为当前控件树的...

    WpfBindingDemo.rar

    6. **转换器**(Converter):有时,数据源的值需要转换成适合显示的格式,这时可以使用IValueConverter接口编写自定义转换器。在Demo中,可能会有这种情况,比如将数字转换为字符串显示。 7. **双向绑定**(Two-...

    Windows Vista培训系列课程(6):WPF之数据绑定

    4. **数据转换**:有时,数据源的值可能需要转换才能适应UI元素,这时可以使用IValueConverter接口实现自定义转换器。例如,将数据库中的日期转换为易读的字符串格式。 5. **双向绑定**:默认情况下,WPF的数据绑定...

    slider双滑块,自定义日历控件返回今天,自定义时分控件

    开发者可以使用Button控件和DataContext来管理时间值,同时结合转换器(IValueConverter)来处理时间格式的转换。此外,还可以实现时间选择的验证,确保用户输入的时间有效。 总结来说,这三个知识点是WPF应用开发...

    WPF的数据绑定详细介绍

    数据绑定过程中有时需要对数据进行转换,例如单位换算、格式化等,这时可以使用IValueConverter接口实现自定义转换器。同时,为了确保输入数据的有效性,可以使用ValidationRule类定义验证规则,确保数据在绑定时...

    typed-converter-combiners:WPF 转换器基础架构库

    这就是IValueConverter接口的用途,它定义了两个方法:Convert和ConvertBack,用于在视图和视图模型之间转换数据。 “typed-converter-combiners”库的核心理念是提供一种方式,使开发者可以更方便地组合多个转换器...

Global site tag (gtag.js) - Google Analytics