IMul​​tiValueConverter,用于将BackBack值(字符串)转换为与targetTypes(WPF)中给定类型兼容的数组

时间:2018-11-16 11:06:16

标签: wpf imultivalueconverter

我想编写一个IMultiValueConverter,该对象将返回值(字符串)转换为具有与targetTypes参数中给定类型兼容的对象的数组,如下所示:

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
    if (value != null)
    {
        List<object> results = new List<object>();
        string[] arr = value.ToString().Split(' ');
        for (int i = 0; i < arr.Length; i++)
        {
            object item = (targetTypes[i])arr[i]; //ERROR: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
        }
        return results.ToArray();
    }
    else
    {
        return null;
    }
}

因此,例如,我想将“ London 22”转换回“ London”(字符串)和“ 2”(int)。如targetTypes参数中的类型列表所示。当然,将其作为数组返回。

但是,正如我在上面的代码中评论的那样,我无法将此数组的元素转换为targetTypes参数所期望的值。

当然,目标是解决绑定期间报告的问题:“无法将值从目标保存回源。”,这是在尝试将字符串存储到int时发生的。

当我使用这样的转换器时报告哪个:

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
    if (value != null)
    {
        return value.ToString().Split(' ');
    }
    else
    {
      return   null;
    }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试如下操作:

public object[] ConvertBack(
    object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
    var strings = value.ToString().Split(' ');

    if (strings.Length != targetTypes.Length)
    {
        throw new InvalidOperationException("Invalid number of substrings");
    }

    return strings
            .Select((s, i) => System.Convert.ChangeType(s, targetTypes[i]))
            .ToArray();
}