• WPF中使用ValueConverter来实现“范围条件触发器”


    在WPF中,我们知道界面层可以通过Trigger触发器实现“条件”——“赋值”的功能

    属性触发器Property Trigger:当Dependency Property的值发生改变时触发。
    数据触发器Data Trigger: 当普通.NET属性的值发生改变时触发。
    事件触发器Event Trigger: 当路由时间被触发时调用。

    属性触发器与数据触发器中又可有多条件触发器,即类似条件语句中“并”的效果

    但发现触发器的应用场景,“条件”的限制都是“等于”,即变量在某个特定的值触发某个“赋值”

    要是想达到“大于”“小于”这种范围条件,Trigger似乎不适合

    项目中很简单也很常见的一个需求,某个数据小于等于0的时候,隐藏它或显示空白

    尝试采用了ValueConverter来实现,原理也很简单,即在自定义的ValueConverter类中,自己可以指定“数据处理过程”

    这个数据处理过程,可以是简单的根据特定数值转换,例如1转换为“星期一”,2转换为“星期二”

    也可以是一个条件判断,或者业务判断,例如上面提到的,原始数据小于等于0时,则转换为string.empty

    甚至可以是复杂的业务逻辑转换

    这样即可以实现一个“范围条件触发器”的作用

    界面代码

    <TextBlock Text="{Binding Path=MyData,Converter={StaticResource dataConverter}}"/>

    界面Resource声明

    <local:DataConverter x:Key="dataConvert"/>

    ValueConverter类代码

    [ValueConversion(typeof(string),typeof(string))]
    public class DataConverter:IValueConverter
    {
    public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
    int tempValue=0;
    int.TryParse((string)value,out tempValue);
    if(tempValue<=0)
    {
    return string.empty;
    }
    else
    {
    return (string)value;
    }
    }
    public object ConvertBack(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
    {
    return (string)value;
    }
    }
  • 相关阅读:
    转载:常见浏览器兼容性问题与解决方案
    转载:gulp文件
    转载:TypeScript 简介与《TypeScript 中文入门教程》
    android mediacodec 在某些机子上无法编码的问题
    Android Camera setRecordingHint函数 在部分手机上的问题。
    raspberry pi 上使用 MQ-7一氧化碳传感器模块
    raspi # gstreamer
    raspberrypi 摄像头 rtsp服务器
    gst-rtsp-server 转发rtsp流
    编译 gstreamer的相关组件
  • 原文地址:https://www.cnblogs.com/luyangsblog/p/3955286.html
Copyright © 2020-2023  润新知