关于IMultiValueConverter的使用
在前端向后端传递数据的过程中,因为涉及多个属性的调用,将数据绑定到CommandParameter,采用了多值转换器进行数据传递。
class MultiBindingConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return values;
}
}
但后端接收到的object对象,总是空对象数组。但如果使用values.Clone(),则能正常的接收到数据。查看了ICommandSource.CommandParameter属性,确实是为空的。难道在binding的过程中,对数据进行了处理吗?
顺着这个思路,去看了下源码实现,在MultiBindingExpression的TransferValue方法中发现了原因。多值绑定的过程大致分为如下过程:
- 向Converter对象传递的值,使用的是_tempValues;
- 经过Converter转换后的返回结果经过校验后,传递给unsetValue;
- 然后清空_tempValues;
- 然后将unsetValue通过ValueChanged事件处理器返回给接收方;
MultiBindingExpression代码
如果直接返回values,会导致_tempValues和unsetValue指向同一个对象,在清空的操作过程中出现问题。所以,使用多值转换器时,要注意传入的values是会被清理的,不要用来存储对象。
关于IMultiValueConverter的使用的更多相关文章
- 【转】WPF MultiBinding 和 IMultiValueConverter
WPF MultiBinding 和 IMultiValueConverter 时间 2015-02-02 19:43:00 博客园精华区 原文 http://www.cnblogs.com/wo ...
- WPF MultiBinding 和 IMultiValueConverter
MultiBinding,描述附加到单个绑定目标属性的Binding对象的集合.可以指定多个数值绑定. IMultiValueConverter通过转换器使用MultiBingding对象,该对象讲根 ...
- WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter
注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...
- WPF进阶之接口(1):IValueConverter,IMultiValueConverter
看一个例子,FontFamily="Trebuchet MS, GlobalSansSerif.CompositeFont" .这样一条简单的语句,熟悉WPF的人在xaml中可能经 ...
- 基于WPF系统框架设计(9)-多值绑定之IMultiValueConverter
应用场景 我想把View层的一个布局控件和功能按钮传到ViewModel层,达到动态变更布局,同时灵活获取功能按钮的属性,让View和ViewModel完全分离,而不受View层影响. 最后我想到使用 ...
- WPF MultiBinding,多值转化器IMultiValueConverter,自制调色板 palette
public class RGBConverter : IMultiValueConverter { //正向修改,整合颜色值 public object Convert(object[] value ...
- WPF多值绑定及多值转换(MultiBinding和IMultiValueConverter)
WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换 例: (1)转换器 public class ContentConverter : IMu ...
- WPF自定义控件第一 - 进度条控件
本文主要针对WPF新手,高手可以直接忽略,更希望高手们能给出一些更好的实现思路. 前期一个小任务需要实现一个类似含步骤进度条的控件.虽然对于XAML的了解还不是足够深入,还是摸索着做了一个.这篇文章介 ...
- WPF入门:数据绑定
上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的 ...
- WPF多源绑定
将控件绑定到多个数据源,ListBox绑定到一个集合,其中每一项绑定到集合中对象的两个属性,并对绑定进行了格式化. <ListBox ItemsSource="{StaticResou ...
随机推荐
- ASP.NET Core C# 反射 & 表达式树 (第二篇)
前言 上一篇讲到了各种反射的操作方式, 这一篇主要说说如何找到类型. Type Information 在找类型的时候, 除了依据简单的 string 以外, 还会用到很多类型属性来做判断. 比如它是 ...
- react-pdf预览在线PDF的使用
1.在react项目中安装react-pdf依赖包 建议安装8.0.2版本的react-pdf,如果安装更高版本的可能出现一些浏览器的兼容性问题: npm install react-pdf@8.0. ...
- 十五,Spring Boot 整合连接数据库(详细配置)
十五,Spring Boot 整合连接数据库(详细配置) @ 目录 十五,Spring Boot 整合连接数据库(详细配置) 最后: JDBC + HikariDataSource(Spring Bo ...
- 我发布了一款相亲平台《i相遇》
因缘际会之下,我踏入了相亲平台的领域.起初,是为一位客户打造专属相亲应用,过程中深入体验了众多同类平台,却遗憾地发现它们普遍掺杂着欺诈的阴影--高昂的费用.兼职托儿的身影.以及虚假的钓鱼信息,不一而足 ...
- ios中文件夹文件的创建和删除
//1.文件夹.文件的创建和删除 NSFileManager *fileManager=[NSFileManager defaultManager]; NSString *filePath=@&quo ...
- C# Webapi 简单的依赖注入-构造函数
控制器部分: using Microsoft.AspNetCore.Mvc; using WebApplication1.IServices; using WebApplication1.Utilit ...
- 7-11 leetcode 2619
请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素.如果数组中没有元素,则返回 -1 . ps:this 环境变量的使用 ,this ...
- 5. 介绍CSS层级
层级的大小使用 z-inde 来定义,层级大的会覆盖层级小的 : 举个例子,我们设计弹窗的时候,会涉及三个层面,我们把遮罩层mask放在第二层,把弹窗内容放在第一层 ,页面内容显示在第三层:
- kotlin函数和Lambda表达式——>高阶函数与lambda表达式
1.高阶函数 高阶函数是将函数用作参数或返回值的函数. 一个不错的示例是集合的函数式⻛格的 fold,它接受一个初始累积值与一个接合函数,并通过将当前 累积值与每个集合元素连续接合起来代入累积值来构建 ...
- SaaS架构:应用服务、应用结构设计
大家好,我是汤师爷~ 应用架构设计通常包括以下步骤: 根据业务架构,将业务需求转化为IT系统,识别核心应用服务. 划分应用结构,设计应用结构与业务流程.数据之间的关系. 设计应用结构之间的交互和集成关 ...