zoukankan      html  css  js  c++  java
  • 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;
    }
    }
  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/luyangsblog/p/3955286.html
Copyright © 2011-2022 走看看