单值转换器
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>
按钮传递多个参数和这个类似