以前在用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>
这样就实现了前台根据数据中的整数 显示不同的职称。
分享到:
相关推荐
- 使用`ICollectionView`接口的`MoveCurrentToNext`或`MoveCurrentToPrevious`方法。 - 示例: ```csharp collectionView.MoveCurrentToNext(); ``` #### 18. 筛选视图中的数据 - **定义**: 对视图中的数据应用...
例如,我们可以用IValueConverter接口实现自定义转换器,处理数据类型转换或格式化。 **ComboBoxImage(Comboximage)**是指在ComboBox中展示图像的技巧。WPF的ComboBox不仅可以显示文本,还可以通过数据模板...
6. **Converters** - IValueConverter或IMultiValueConverter,用于转换数据格式或提供UI呈现逻辑。测试转换器确保它们在不同输入下返回正确的输出。 为了有效地进行这些测试,开发者通常会利用以下测试框架: - *...
3. **条件格式化**:通过使用数据触发器(`DataTrigger`)和模板选择器(`DataTemplateSelector`),你可以根据数据值来改变单元格的样式。例如,可以设置一个触发器,当数据项的某个属性值满足特定条件时,改变...
为了使数据源能够通知WPF框架其属性已改变,应实现INotifyPropertyChanged接口。当属性值更改时,触发PropertyChanged事件,这样绑定系统就能检测到并更新相应的UI。 8. **依赖属性(DependencyProperty)** 对于...
`IValueConverter`接口允许自定义转换,将数据源的值转换为适合显示的格式,或者将视图的输入转换为数据源可以理解的值。例如,日期字符串转换为DateTime对象。 ### 6. 事件绑定 在MVVM中,`ICommand`接口用于处理...
5. **转换器**:有时需要将源数据转换为适合显示的格式,这时可以使用IValueConverter接口实现自定义转换器。 6. **双向绑定**:默认情况下,数据绑定是单向的,但通过设置可以实现双向绑定,让UI和数据源之间的变化...
`StringFormat`用于格式化`UserAge`的显示。 **文件结构与作用** 在提供的文件列表中,我们可以看到以下几个关键文件: 1. **App.config**:应用程序的配置文件,可能包含数据库连接字符串或其他应用设置。 2. **...
这时可以使用`IValueConverter`接口实现自定义转换器。 5. **双向绑定**:默认情况下,绑定是单向的,即从数据源到UI。但双向绑定允许UI的改变反向更新数据源,常用于`TextBox`等输入控件。 ```xml , Mode=TwoWay}...
这时我们可以使用`IValueConverter`接口创建自定义转换器,并在绑定表达式中指定: ```xml , Converter={StaticResource AgeConverter}, Mode=TwoWay}" /> ``` ### 事件触发更新 虽然双向绑定可以自动处理大部分...
我们可以将坐标列表绑定到Path元素的Data属性,然后通过某种转换器(如`IValueConverter`)将坐标点列表转换为适当的PathGeometry数据格式。 为了实现交互性,可能还需要添加事件处理程序,比如鼠标点击事件,使得...
数据转换器接收源数据并返回转换后的结果,例如将数值转换为颜色,或者将日期格式化。 **绑定方式** WPF提供了多种绑定方式,包括单向绑定(只从源到目标)、双向绑定(源和目标间互相更新)和OneTime、...
2. **数据绑定和转换器**:使用`IValueConverter`可以处理更复杂的本地化需求,例如日期和数字格式。 3. **动态资源与静态资源**:`x:Static`用于静态资源,意味着在编译时确定资源值;而数据绑定到动态资源则允许...
有时需要在数据源和UI之间进行转换,比如单位转换、格式化日期等。这时可以使用`IValueConverter`接口实现自定义转换器,并在绑定中指定。 ```xml , Converter={StaticResource DateConverter}}" /> ``` ### 6. ...
使用`IValueConverter`接口,可以自定义数据绑定的转换过程,例如将数据库中的整数年龄转换为字符串显示。 ### 7. 绑定上下文(DataContext) DataContext是WPF中非常重要的概念,它是决定哪个对象作为当前控件树的...
6. **转换器**(Converter):有时,数据源的值需要转换成适合显示的格式,这时可以使用IValueConverter接口编写自定义转换器。在Demo中,可能会有这种情况,比如将数字转换为字符串显示。 7. **双向绑定**(Two-...
4. **数据转换**:有时,数据源的值可能需要转换才能适应UI元素,这时可以使用IValueConverter接口实现自定义转换器。例如,将数据库中的日期转换为易读的字符串格式。 5. **双向绑定**:默认情况下,WPF的数据绑定...
开发者可以使用Button控件和DataContext来管理时间值,同时结合转换器(IValueConverter)来处理时间格式的转换。此外,还可以实现时间选择的验证,确保用户输入的时间有效。 总结来说,这三个知识点是WPF应用开发...
数据绑定过程中有时需要对数据进行转换,例如单位换算、格式化等,这时可以使用IValueConverter接口实现自定义转换器。同时,为了确保输入数据的有效性,可以使用ValidationRule类定义验证规则,确保数据在绑定时...
这就是IValueConverter接口的用途,它定义了两个方法:Convert和ConvertBack,用于在视图和视图模型之间转换数据。 “typed-converter-combiners”库的核心理念是提供一种方式,使开发者可以更方便地组合多个转换器...