如何解决MultiValueConverter Xamarin / WPF
在开发MultiValueConverter时,我遇到了一个奇怪的错误。
我在行上收到“无效的转换异常”:
int frameSize = (int)values[0] ; // <-- thows InvalidCast Exception
老实说,我无法确定原因。
public class SizeConverter : IMultiValueConverter
{
public object Convert(object[] values,Type targettype,object parameter,CultureInfo culture)
{
if (values == null || values.Length <3 || values[2] == null || values[1] == null || values[0] == null)
return 0;
int numItems = (int)values[2];
int separatorSize = (int)values[1];
int frameSize = (int)values[0] ; // <-- thows InvalidCast Exception
int totalSeparatorSize = (numItems - 1) * separatorSize;
int remainingArea = frameSize - totalSeparatorSize;
return remainingArea / numItems;
}
public object[] ConvertBack(object value,Type[] targettypes,CultureInfo culture)
{
throw new NotImplementedException();
}
}
我在即时窗口中的Converter中验证了接收到的值[3]数组:
`{object[3]}
[0]: 100
[1]: 2
[2]: 4`
[TestClass]
public class TestConverters
{
[DaTarow(100,2,4)]
[DataTestMethod]
public void Test_Piece_Sizing(double frameSize,int separatorSize,int numItems)
{
var sizeConverter = new SizeConverter();
object[] values = new object[] { frameSize,separatorSize,numItems };
Assert.AreNotEqual(0,sizeConverter.Convert(values,typeof(int),null,System.Globalization.CultureInfo.CurrentCulture));
}
}
================================================ ==============================
==================并且修复后的代码是:======================= =
public class SizeConverter : IMultiValueConverter
{
public object Convert(object[] values,CultureInfo culture)
{
if (values == null || values.Length <3 || values[2] == null || values[1] == null || values[0] == null)
return 0;
int numItems = (int)values[2];
int separatorSize = (int)values[1];
double frameSize = System.Convert.Todouble(values[0]) ;
int totalSeparatorSize = (numItems - 1) * separatorSize;
int remainingArea = System.Convert.ToInt32(frameSize) - totalSeparatorSize;
return remainingArea / numItems;
}
public object[] ConvertBack(object value,CultureInfo culture)
{
throw new NotImplementedException();
}
}
解决方法
在测试案例中,frameSize
是double
,而不是int
。在您的int
方法中将其更改为double
或强制转换为Convert
。
frameSize是double.just转换为double
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。