封装WPF中转换器常用用法封装

devtools/2025/3/16 16:43:47/
  1. 代码经常遇到类型A转换到类型C,但是已经写好类型A转换类型B类型B转换类型C。往往遇到这种情况,通常会重新写过一个转换器来进行满足需求。以下是解决该痛点。
/// <summary>
/// 转换器组转换器
/// </summary>
[ContentProperty(nameof(Converters))]
public class ValueConverterGroup : IValueConverter
{public List<IValueConverter> Converters { get; set; } = new List<IValueConverter>();public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (this.Converters is IEnumerable<IValueConverter> converters){return converters.Aggregate(value, (current, converter) => converter.Convert(current, targetType, parameter, culture));}return DependencyProperty.UnsetValue;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (this.Converters is IEnumerable<IValueConverter> converters){return converters.Reverse().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));}return DependencyProperty.UnsetValue;}
}
        <local:ValueConverterGroup x:Key="StringToVisibilityConvert"><local:StringToUpperConvert /><local:StringToVisibilityConvert /></local:ValueConverterGroup>
  1. 使用MarkupExtension进行封装转换器
    public abstract class ValueConverterBase : MarkupExtension, IValueConverter{public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return Binding.DoNothing;}public override object ProvideValue(IServiceProvider serviceProvider){return this;}}

使用该类封装StringToUpperConvert

	//使用: <TextBlock Text="{Binding TestText, Mode=OneWay, UpdateSourceTrigger=PropertyChanged, Converter={local:StringToUpperConvert}}" />public class StringToUpperConvert : ValueConverterBase{public override object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is not null && value is string){return ((string)value).ToUpper();}return Binding.DoNothing;}}

3.转换器单例

    //使用:<TextBlock Text="{Binding TestText, Converter={x:Static local:StringToUpperConvert.Instance}}" />public class StringToUpperConvert : IValueConverter{public static StringToUpperConvert Instance { get;set; } = new StringToUpperConvert();public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is not null && value is string){return ((string)value).ToUpper();}return Binding.DoNothing;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return DependencyProperty.UnsetValue;}}

http://www.ppmy.cn/devtools/167601.html

相关文章

【前端实战】一文掌握响应式布局 - 多设备完美适配方案详解

一、前言 在当今互联网时代&#xff0c;用户通过各种设备访问网站已成为常态。如何让网站在不同设备上都能完美展现&#xff1f;本文将通过一个实际案例&#xff0c;详细讲解响应式布局的实现方案。 二、项目效果展示 PC 移动端 平板(ipad Pro) 三、核心实现方案 1. 基础设置…

《DeepSeek 开源 DeepGEMM:开启AI计算新时代的密钥》:此文为AI自动生成

《DeepSeek 开源 DeepGEMM&#xff1a;开启AI计算新时代的密钥》&#xff1a;此文为AI自动生成 引言&#xff1a;AI 计算的新曙光 在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最为耀眼的领域之一。从语音助手到自动驾驶&#xff0c;从图像…

基于Spring Boot的航司互售系统

文章目录 项目介绍项目截图项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系&#x1f34…

使用WireShark解密https流量

概述 https协议是在http协议的基础上&#xff0c;使用TLS协议对http数据进行了加密&#xff0c;使得网络通信更加安全。一般情况下&#xff0c;使用WireShark抓取的https流量&#xff0c;数据都是加密的&#xff0c;无法直接查看。但是可以通过以下两种方法&#xff0c;解密抓…

matlab:二维绘图篇——plot绘图命令

目录 1.plot绘图命令 &#xff08;1)plot(x) 实例——实验数据曲线 实例——窗口分割 实例——随机矩阵 (2).plot(x,y) 实例——摩擦系数变化曲线 &#xff08;3&#xff09;plot(x1,y1,x2,y2,...) 实例——正弦图形 实例——正弦余弦图形 &#xff08;4&#xff09…

uniapp+vue实现购物车的左滑删除功能

左滑删除 删除功能利用透明的改变在显示删除按钮实现思路代码效果展示 利用scroll滑动容器来实现代码实现效果展示 我们在移动端的电商平台中&#xff0c;一般都是左滑后然后删除按钮出现&#xff0c;用户可以点击删除按钮来进行该商品的删除&#xff0c;这里我分享两种方法来达…

机器学习-----决策树

文章目录 1、概念2. 决策树的构建过程2.1 特征选择2.2 树的生成2.3 树的剪枝 3. 决策树的优缺点4. 决策树的应用4.1 分类任务4.2 回归任务4.3 集成学习 代码示例 总结 1、概念 1.1决策树是什么 决策树是通过对样本的训练&#xff0c;建立出分类规则&#xff0c;并对新样本进行…

【Linux系统编程】共享内存

目录 1、什么是共享内存2、mmap函数3、mmap对比read、write4、munmap 函数5、msync函数5.1、通过页表机制&#xff0c;将修改的数据同步到磁盘&#xff0c;那为什么还需要msync函数 6、示例6.1、使用mmap让进程之间通信&#xff0c;文件作为媒介6.3、修改文件&#xff0c;使用m…