关于IMultiValueConverter的使用

Posted on 2024-02-05 15:44  云起  阅读(133)  评论(0编辑  收藏  举报

在前端向后端传递数据的过程中,因为涉及多个属性的调用,将数据绑定到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是会被清理的,不要用来存储对象。

Copyright © 2024 云起
Powered by .NET 9.0 on Kubernetes