IMultiValueConverter,将值(字符串)转换回与targetTypes(WPF)中给定的类型兼容的数组



我想写一个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;
}
}

您可以尝试以下操作:

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();
}

相关内容

  • 没有找到相关文章

最新更新