[WPF] IMultiValueConverter的Values直接返回会怎样?

 专注于.NET技术开发的博主,关注我个人微信公众号查看更多:承哥技术交流小作坊。

IMultiValueConverter接口,我们在写wpf程序的时候应该是比较熟悉了,这个接口主要用于实现多路数据绑定转换器。

如果我们写了一个转换器,继承至IMultiValueConverter,直接将传入的值返回,会出现什么结果?示例代码如下:


//...省略... 转换器礼逻辑
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
  return values;
}

//...省略...  绑定逻辑      
<Button.CommandParameter>
  <MultiBinding Converter="{StaticResource MultiValueConverter}">
  <Binding Path="P1"/>
  <Binding Path="P2"/>
  <Binding Path="P3"/>
  </MultiBinding>
</Button.CommandParameter>
//...省略...

当我们从CommandParameter获取相关的参数值的时候,我们发现参数的数量为0!

我们的参数明明没有做任何修改,为什么会变成了0? 正常不应该是数组长度为3的数组吗?

通过查看源代码发现,原来转换器里面的Values被清空了。

源代码位置:MultiBindingExpression -> TransferValue() 方法。

部分源代码如下所示:


   //...省略...  this._tempValues 表示原始的数据 obj2 表示转换后的数据
   obj2 = this.Converter.Convert(this._tempValues, base.TargetProperty.PropertyType, this.ParentMultiBinding.ConverterParameter, culture);
   //...省略...  这里把原始数据清理掉了
   Array.Clear(this._tempValues, 0, this._tempValues.Length);
   //……省略……

所以要解决这个问题,我们可以修改下转换器:


//...省略... 转换器礼逻辑
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
  return values.Clone();
}

这样就可以解决上述问题了。

 专注于.NET技术开发的博主,关注我个人微信公众号查看更多:承哥技术交流小作坊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷眼Σ(-᷅_-᷄๑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值