IMultiValueConverter 将 ConvertBack 值(字符串)转换为与 targetTypes (WPF) 中给定类型兼容的数组
IMultiValueConverter that ConvertBack value (string) to an array compatible with the types given in 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”(整数)。如 targetTypes 参数中的类型列表所示。当然,return 它作为一个数组。
但是,正如我在上面的代码中评论的那样,我无法将此数组的元素转换为 targetTypes 参数所期望的。
目标当然是解决绑定期间报告的问题:"Can not save the value from target back to source.",当尝试将字符串存储到 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();
}
我想编写一个 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”(整数)。如 targetTypes 参数中的类型列表所示。当然,return 它作为一个数组。
但是,正如我在上面的代码中评论的那样,我无法将此数组的元素转换为 targetTypes 参数所期望的。
目标当然是解决绑定期间报告的问题:"Can not save the value from target back to source.",当尝试将字符串存储到 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();
}