WPF中在XAML中实现数据类型转换的两种方法

简介: 原文:WPF中在XAML中实现数据类型转换的两种方法熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在UI界面上,比如你用bool类型存储了一个人的性别,但是在界面上却需要经过转化后显示为男或女; 今天又把数据绑定部分又看了一下,在这里就算是做个总...
原文: WPF中在XAML中实现数据类型转换的两种方法

熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在UI界面上,比如你用bool类型存储了一个人的性别,但是在界面上却需要经过转化后显示为男或女;

今天又把数据绑定部分又看了一下,在这里就算是做个总结吧!

方法一:当我们定义一个类,该类中又有该类类型的一个属性,那么如果我们只是在XAML中使用简单的数据绑定的话,程序就会出现问题,究其原因就是程序无法正确对该类的对象的类类型的属性无法正确转化,所以我们需要自定义一个转换类,该类继承TypeConverter,并需要重写一个该类的一个成员函数ConvertFrom,并且为需要进行转换的类添加一个类型转换的属性,最后在XAML中进行静态资源的使用就可以了!

相应类的示例代码如下所示:

    Human.cs

[TypeConverterAttribute(typeof(ChildConverterToHuman))] public class Human { public string Name { get; set; } public Human Child { get; set; } } public class ChildConverterToHuman : TypeConverter { public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { Human h = new Human(); string str = value.ToString(); h.Name = str; return h; } }

 

MainWindow.xaml    

<Window.Resources> <local:Human x:Key="human" Name="hippie" child="tom"/> </Window.Resources>

这样我们就可以正确转化Human对象的child的属性的数据类型;

Human hu = this.FindResource("human") as Human;
if (hu != null)
{
     MessageBox.Show(hu.Name + hu.Child.Name);
}

方法二:道理和方法一是一样,依然需要定义一个类型转换的类,但是需要继承的类是IValueConverter类,需要我们重写Convert和ConvertBack函数(一般重写Convert就可以)

  public class Person
    {
        public string Name { get; set; }
        public bool Gender { get; set; }
    }
    public class Converter : IValueConverter
    {
        /// <summary>
        /// Model TO UI
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool gender = (bool)value;
            if (gender == true)
            {
                return "";
            }
            else
            {
                return "";
            }
        }

        /// <summary>
        /// UI TO Model
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetType"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    <Window.Resources>
        <local:Converter x:Key="converter"/>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <StackPanel x:Name="sp" Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" FontSize="20" Margin="0,0,24,0"/>
                <TextBlock Text="{Binding Gender, Converter={StaticResource converter}}" FontSize="20"/>
            </StackPanel>
        </StackPanel>
    </Grid>
 Person p = new Person
 {
     Name = "Tom",
      Gender = false
 };
 sp.DataContext = p;

这样我们就可以将不同的数据类型通过一定的转化显示在程序界面上了!

 

目录
相关文章
|
7月前
|
XML 开发框架 .NET
|
4月前
|
容器 C# 开发者
XAML语言大揭秘:WPF标记的魅力所在,让你轻松实现界面与逻辑分离,告别复杂代码!
【8月更文挑战第31天】XAML提供了一种直观且易于维护的界面设计方式,使得开发者可以专注于逻辑和业务代码的编写,而无需关心界面细节。通过数据绑定、布局管理和动画效果等特性,XAML可以实现丰富的界面交互和视觉效果。在实际开发过程中,开发者应根据具体需求选择合适的技术方案,以确保应用程序能够满足用户的需求。希望本文的内容能够帮助您在WPF应用程序开发中更好地利用XAML语言。
51 0
|
4月前
|
C#
WPF/C#:数据绑定到方法
WPF/C#:数据绑定到方法
47 0
|
IDE C# 开发工具
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
61 0
|
C#
WPF技术之Xaml Window
WPF Window 是一个 WPF 窗口类,它具有许多属性枚举可以控制窗口的外观和行为。
132 0
WPF技术之Xaml Window
|
XML 数据格式 C++
WPF-疑难问题-xaml编码导致中文字符编译无效
WPF-疑难问题-xaml编码导致中文字符编译无效
216 0
|
C#
4.使用代码和未经编译的XAML创建WPF应用程序
4.使用代码和未经编译的XAML创建WPF应用程序
91 0
|
数据采集 人工智能 监控
【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧
随着工业化的进一步发展,制造业、工业自动化等多领域,都可能用到上位监控系统。而WPF在上位监控系统方面,应该算是当下最流行的前端框架之一了。而随着监控体系的不断完善与更新迭代,监控画面会变得越来越复杂、多样化和全面化。
323 0
【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧
|
C# Windows
WPF的WindowsFormsHost上浮动控件方法
如何在WPF的WindowsFormsHost实现浮动控件
305 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1203 0
WPF钟表效果实现