[WPF]XAML中使用IMultiValueConverter实现Command的多参数传参
问题
如何对ICommand传入多个参数?
背景
最近在做一个WPF的开发,有多个相近的功能写了不同的Command,因为要对应不同的对象。因为是CtrlCV,显得代码有点冗赘不够优雅,但是ICommand又只能接受一个参数。
思路
使用MultiBinding,对CommandParameter进行绑定,然后再使用IMultiValueConverter对多个参数进行转换,变成object传进去
代码实现
- 实现IMultiValueConverter
public class MultiValueConverter:IMultiValueConverter{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
object[] args = new object[values.Length];
values.CopyTo(args, 0);
//要重新创建values的实例,否则参数传过去是空引用
return args;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
- 在XAML里实现绑定
<Page.Resource>
<cvt:MultiValueConverter x:Key="commandParameterConverter">
</Page.Resource>
...
<Button
Command="{Binding StartCommand}"
Content="Start">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource commandParameterConverter}">
<Binding Path="DataContext.Path1" RelativeSource="{RelativeSource AncestorType=local:HomePage}" />
</MultiBinding>
</Button.CommandParameter>
</Button>
- 在ViewModel中的处理逻辑
public class HomePageViewModel:ObservableObject{
public string Path1 {get;set;}
[RelayCommand]
private async Task Start(object arg){
if(object is not object[] args || args[0] is not string path){
throw new Exception("Invalid argument type");
}
//Do Something else...
}
}
- 亦可以使用Tuple进行传参
仅展示TupleConverter啦,其余大体差不多
public class TupleConverter:IMultiValueConverter{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return Tuple.Create(values[0],values[1],values[2]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
[WPF]XAML中使用IMultiValueConverter实现Command的多参数传参的更多相关文章
- WPF xaml中列表依赖属性的定义
列表内容属性 如上图,是一个列表标题排序控件,我们需要定义一个标题列表,从而让调用方可以自由的设置标题信息. 在自定义控件时,会遇到列表依赖属性,那么该如何定义呢? 下面是错误的定义方式: /// & ...
- WPF Xaml中创建集合
首先在xaml中创建集合是一个不可取的方法. 本方法仅作为xaml的学习. 本文略微无聊,主要是编写的东西都是老玩意. 首先是定义一个类,作为你要加载集合的模型. 结构如下 internal clas ...
- 关于WPF XAML 中 Trigger的反向ExitActions
触发器,顾名思义,就是当满足一定条件时,会触发一些操作,比如:改变控件的透明度,显隐,宽高等等,触发器本身做了一些操作,就是触发器触发条件不符合的时候,会自动把在触发器中更改的属性还原.但,并不是所有 ...
- WPF XAML中 Storyboard.TargetProperty设置TransformGroup指定的变换"RenderTransform.Children
<Grid x:Name="xx" RenderTransformOrigin="0.5,0.5"> <Grid.RenderTransfor ...
- Hibernate的HQL语句中定位参数和具名参数传参
HQL查询: 1.有关hql查询语句中的问号参数形式,如果出现有多个问号,这对后面设置参数就比较麻烦. 如:from User user where user.name=? and user.age= ...
- C++中的二级指针和指针引用函数传参
在函数的使用过程中,我们都明白传值和传引用会使实参的值发生改变.那么能够通过传指针改变指针所指向的地址吗? 在解决这个问题之前,也许我们应该先了解指针非常容易混淆的三个属性: ①.指针变量地址(&am ...
- 标记扩展和 WPF XAML
本主题介绍 XAML 的标记扩展概念,包括其语法规则.用途以及底层的类对象模型. 标记扩展是 XAML 语言以及 XAML 服务的 .NET 实现的常规功能. 本主题专门详细论述了用于 WPF X ...
- WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参
原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataC ...
- 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发
原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...
- VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。
原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...
随机推荐
- 长连接网关技术专题(十一):揭秘腾讯公网TGW网关系统的技术架构演进
本文由腾讯技术团队peter分享,原题"腾讯网关TGW架构演进之路",下文进行了排版和内容优化等. 1.引言 TGW全称Tencent Gateway,是一套实现多网统一接入,支持 ...
- 即时通讯技术文集(第26期):实时音视频技术合集(Part1) [共16篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第26 期. [- 1 -] 实时语音聊天中的音频处理与编码压缩技术简述 [链接] http:/ ...
- Ubuntu安装宝塔服务
Linux面板7.9.4安装脚本 查看详细安装教程 使用 SSH 连接工具,如 堡塔SSH终端 连接到您的 Linux 服务器后, 挂载磁盘 ,根据系统执行相应命令开始安装(大约2分钟完成面板安装): ...
- CDS标准视图:测量点数据 I_MeasuringPointData
视图名称:测量点数据 I_MeasuringPointData 视图类型:基础视图 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IMEASPOINTDATA' @A ...
- 字节流:FileInputStream和FileOutputStream的使用
/** * 测试FileInputStream和FileOutputStream的使用 * * 结论: * 1. 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 * 2. 对于非 ...
- 六. Redis当中的“发布” 和 “订阅” 的详细讲解说明(图文并茂)
七. Redis 当中 Jedis 的详细刨析与使用 @ 目录 七. Redis 当中 Jedis 的详细刨析与使用 1. Jedis 概述 2. Java程序中使用Jedis 操作 Redis 数据 ...
- Windows11本地部署DeepSeek加速
技术背景 在上一篇文章中我们介绍了在Ubuntu Linux操作系统上部署了一个DeepSeek-R1:14B,再通过其他电脑远程调用模型进行生成的方法.这里我们介绍一下Windows11安装Olla ...
- 深入剖析实体-关系模型(ER 图):理论与实践全解析
title: 深入剖析实体-关系模型(ER 图):理论与实践全解析 date: 2025/2/8 updated: 2025/2/8 author: cmdragon excerpt: 实体-关系模型 ...
- 从cos下载文件
新建test.sh脚本 #!/bin/bash set -e cospath=https://11111.cos.ap-beijing.myqcloud.com/emr/hive/script/202 ...
- Core WebAPI配置Swagger
1.配置Swagger: Swagger是一套接口文档的规范,通过这套规范,你只需要按照它的规范去定义接口以及接口相关的信息.再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接 ...