欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > WPF中的转换器

WPF中的转换器

2025/9/23 5:20:10 来源:https://blog.csdn.net/weixin_64532720/article/details/143566873  浏览:    关键词: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>

 

 

 

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词