首页 > 其他分享 >IValueConverter的基础用法

IValueConverter的基础用法

时间:2024-02-02 22:33:07浏览次数:17  
标签:object int IValueConverter 基础 intValue 用法 range &&

1、我们在做工控项目的时候通常设置配方的上下限
这个时候要求OK数在上下限范围之内,否则NG
首先我们绑定一个简单的List用来展示数据,我这里用学生Age来展示

<ListView ItemsSource="{Binding DataList}" Margin="20">
   <ListView.View>
          <GridView>
              <GridViewColumn Width="80" Header="Id" DisplayMemberBinding="{Binding Id}"/>
              <GridViewColumn Width="100" Header="名称" DisplayMemberBinding="{Binding Name}"/>
              <GridViewColumn Width="200" Header="年龄" DisplayMemberBinding="{Binding Age}"/>
          </GridView>
   </ListView.View>
</ListView>

2、我们需要年龄在18岁之下是绿色,否则是蓝色的背景

 <Window.Resources>
        <cvt:RangeToBooleanConverter x:Key="RangeToBooleanConverter"/>
    </Window.Resources>
    <Grid>
        <ListView ItemsSource="{Binding DataList}" Margin="20">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Age, Converter={StaticResource RangeToBooleanConverter}, ConverterParameter='18-100'}" Value="True">
                            <Setter Property="Background" Value="Green"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Age, Converter={StaticResource RangeToBooleanConverter}, ConverterParameter='0-17'}" Value="True">
                            <Setter Property="Background" Value="Blue"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="80" Header="Id" DisplayMemberBinding="{Binding Id}"/>
                    <GridViewColumn Width="100" Header="名称" DisplayMemberBinding="{Binding Name}"/>
                    <GridViewColumn Width="200" Header="年龄" DisplayMemberBinding="{Binding Age}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>

3、接下来我们看自己定义的RangeToBooleanConverter

public class RangeToBooleanConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null && value is int intValue && parameter != null && parameter is string rangeString)
        {
            var range = rangeString.Split('-');
            if (range.Length == 2 && int.TryParse(range[0], out int minValue) && int.TryParse(range[1], out int maxValue))
            {
                return intValue >= minValue && intValue <= maxValue;
            }
        }

        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

标签:object,int,IValueConverter,基础,intValue,用法,range,&&
From: https://www.cnblogs.com/guchen33/p/18004127

相关文章

  • 基础算法(七)高精度除法模板
    模板如下#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;vector<int>div(vector<int>&A,intB,int&r){vector<int>C;for(inti=0;i<A.size();i++){r=r*10+A[i];......
  • 基础算法(六)高精度乘法模板
    模板如下#include<iostream>#include<vector>usingnamespacestd;vector<int>mul(vector<int>&A,intb){vector<int>C;intk=0;for(inti=0;i<A.size();i++){k+=A[i]*b;C.push_back(k%10);......
  • 代码随想录算法训练营第十天| 堆栈理论基础 232.用栈实现队列 225. 用队列实现栈
    堆栈理论基础 代码随想录(programmercarl.com)STL中栈往往不被归类为容器,而被归类为containeradapter(容器适配器)。栈的内部结构,栈的底层实现可以是vector,deque,list都是可以的,主要就是数组和链表的底层实现。我们常用的SGISTL,如果没有指定底层实现的话,默认是以deque为缺......
  • Linux基础47 Ansible之ad-hoc, 命令模块(command, shell, script), 软件管理模块(yum,
    Ansible之ad-hoc一、什么是ad-hoc1.什么是ad-hocad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存2.ad-hoc使用场景可以用作查看远程机器的进程,或者磁盘,或者拷贝文件3.ad-hoc命令使用[root@m01~]#ansibleweb01-mshell-a'free-m'web01|CHANGED|rc=......
  • 基础算法(五)高精度减法模板
    模板如下#include<iostream>#include<vector>usingnamespacestd;boolcmp(vector<int>&A,vector<int>&B){if(A.size()!=B.size())returnA.size()>B.size();for(inti=A.size();i>=0;i--){if(A[i]!=B[i])......
  • 【自动化基础】pytest详解及进阶使用
    pytest介绍及基本使用【自动化测试框架】pytest和unitttest你知道多少?区别在哪?该用哪个?pytest原理参数化@pytest.mark.parametrize(argnames,argvalues,indirect=False,ids=None,scope=None))参数说明argnames必传,参数名,以逗号分隔的字符串,表示一个或多个......
  • 基础算法(四)高精度加法模板
    模板如下#include<iostream>#include<vector>usingnamespacestd;vector<int>add(vector<int>&A,vector<int>&B){if(A.size()<B.size())returnadd(B,A);vector<int>C;intt=0;for(inti......
  • Java并发基础:CountDownLatch全面解析!
    内容概要CountDownLatch的优点在于能够简洁高效地协调多个线程的执行顺序,确保一组线程都完成后才触发其他线程的执行,适用于资源加载、任务初始化等场景。它提供了清晰的等待/通知机制,易于理解和使用,是提升多线程程序性能和可靠性的重要工具。核心概念CountDownLatch是java.util......
  • Windows内核开发-[6]、内核编程基础(3)
    内存分配在应用层编程时,系统提供了GlobalAlloc/HeapAlloc/LocalAlloc等函数。C/C++库提供了malloc函数,以及new操作符在堆上分配内存。在我前面一个关于Windows页交换文件的博客中,介绍了虚拟内存,虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的......
  • linux基础命令(三)
    •Linux命令–用来实现某一类功能的指令或程序执行大多数命令,都要找到相应的程序[root@localhost~]#ls/usr/bin/hostname/usr/bin/hostname#绿色可以执行的程序[root@localhost~]#–命令的执行依赖于解释器(默认解释器:/bin/bash)用户------->解释器--......