当前位置: 首页 > article >正文

WPF中的转换器

单值转换器

1.创建项目后下载两个NuGet程序包

2.先定义一个转换器实现IValueConverter接口

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;

namespace WPF练习14单值转换器.Converter
{
    public class BoolToVisibilityConverter : IValueConverter
    {
        // Convert负责把源数据类型转换成目标数据类型
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool oldType = (bool)value; // 源数据类型
            Visibility newType = oldType ? Visibility.Visible : Visibility.Collapsed; // 目标类型
            return newType;
        }
        // ConvertBack负责目标数据类型转换成源数据类型
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

3.在ViewModel文件夹中创建MainWindowViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WPF练习14单值转换器.ViewModel
{
    public class MainWindowViewModel : ObservableObject
    {
		private bool isShow=true;

		public bool IsShow
		{
			get => isShow;
			set => SetProperty(ref isShow, value);
		}
        public RelayCommand UpdateIsShowCommand
        {
            get
            {
                return new RelayCommand(() =>
                {
                    IsShow = !IsShow;
                });
            }
        }

    }
}

4.把转换器当成一个资源导入到XAML文件中 并且将MainWindowViewModel导入DataContext上下文中

 

<Window x:Class="WPF练习14单值转换器.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF练习14单值转换器"
        xmlns:c="clr-namespace:WPF练习14单值转换器.Converter"
        xmlns:vm="clr-namespace:WPF练习14单值转换器.ViewModel"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="450"
        Width="800">
    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
    <Window.Resources>
        <c:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />
    </Window.Resources>
    <Grid>
        <WrapPanel Orientation="Vertical">
            <Button Width="100"
                    Height="30"
                    HorizontalAlignment="Left"
                    Content="显示/隐藏"
                    Visibility="{Binding IsShow, Converter={StaticResource boolToVisibilityConverter}}" />

            <Button Width="100"
                    Height="30"
                    HorizontalAlignment="Left"
                    Command="{Binding UpdateIsShowCommand}"
                    Content="修改IsShow" />
        </WrapPanel>
       
    </Grid>
</Window>

多值转换器(结构同上)

ObjToArrConverter如下:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace WPF练习14单值转换器.Converter
{
    public class ObjToArrConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            return values.ToArray();
        }

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

MainWindowViewModel如下:

 

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace WPF练习14单值转换器.ViewModel
{
    public class MainWindowViewModel : ObservableObject
    {
        public RelayCommand<object[]> Command3
        {
            get
            {
                return new RelayCommand<object[]>((arr) =>
                {

                    MessageBox.Show(arr[0].ToString());
                    MessageBox.Show(arr[1].ToString());
                    MessageBox.Show(arr[2].ToString());
                });
            }
        }

    }
}

 MainWindow.XAML如下:

<Window x:Class="WPF练习14单值转换器.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF练习14单值转换器"
        xmlns:c="clr-namespace:WPF练习14单值转换器.Converter"
        xmlns:vm="clr-namespace:WPF练习14单值转换器.ViewModel"
        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="450"
        Width="800">
    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
    <Window.Resources>
        <c:ObjToArrConverter x:Key="objToArrConverter" />
    </Window.Resources>
    <Grid>
        <WrapPanel Orientation="Vertical">
            <TextBox x:Name="Id" />
            <TextBox x:Name="Name" />
            <TextBox x:Name="Status" />
            <TextBlock Width="150"
                       Height="30"
                       HorizontalAlignment="Left"
                       Text="传递多个参数">
     <i:Interaction.Triggers>
         <i:EventTrigger EventName="MouseLeftButtonUp">
             <i:InvokeCommandAction Command="{Binding Command3}">
                 <i:InvokeCommandAction.CommandParameter>
                     <MultiBinding Converter="{StaticResource objToArrConverter}">
                         <Binding ElementName="Id"
                                    Path="Text" />
                         <Binding ElementName="Name"
                                    Path="Text" />
                         <Binding ElementName="Status"
                                    Path="Text" />
                     </MultiBinding>
                 </i:InvokeCommandAction.CommandParameter>
             </i:InvokeCommandAction>
         </i:EventTrigger>
     </i:Interaction.Triggers>
            </TextBlock>
        </WrapPanel>

    </Grid>
</Window>

 

 

 

 按钮传递多个参数和这个类似


http://www.kler.cn/a/383824.html

相关文章:

  • Pandas 数据分析工具详细教程
  • 【测试工具篇一】全网最强保姆级教程抓包工具Fiddler(2)
  • 探索前端框架:为你的项目选择合适的UI工具箱
  • 基于梧桐数据库的实时数据分析解决方案
  • CUDA与OpenCL区别
  • 查看 linux ubuntu 分区 和 挂载 情况 lsblk
  • 机器学习—推理:做出预测(前向传播)
  • WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)
  • AWS S3在客户端应用不能使用aws-sdk场景下的文件上传与下载
  • 七.numpy模块
  • 2024-11-06 问AI: [AI面试题] 人工智能如何用于欺诈检测和网络安全?
  • Bert快速入门
  • 【大数据学习 | kafka高级部分】kafka的优化参数整理
  • 数据集整理
  • 机器学习:使用SVM进行人脸识别
  • Linux(CentOS)运行 jar 包
  • WireShark入门学习笔记
  • Maven(19)如何使用Maven部署项目?
  • 矩阵论 •「线性空间、基变换与向量坐标变换」
  • 批量压缩tif文件到指定物理宽度mm,同时保持DPI大于300
  • 【spring】IOC与DI
  • mysql字段是datetime如何按照小时来统计
  • Ai练习过程当中的注意事项 Ⅱ
  • 【AI日记】24.11.06 我对投资的一点浅见
  • 问:Redis为什么这么快?
  • Magentic-One:微软推出多智能体系统,用于解决跨领域的复杂网络和文件任务