如何解决在ValueConverter中获取NullReferenceException
我有以下IValueConverter StringCaseConverter.cs:
internal sealed class StringCaseConverter : IValueConverter
{
public bool IsUpperCase { private get; set; }
public object Convert(object value,Type targettype,object parameter,CultureInfo language)
{
var stringValue = value.ToString();
return this.IsUpperCase ? stringValue.toupperInvariant() : stringValue.ToLowerInvariant();
}
public object ConvertBack(object value,CultureInfo language)
{
return value;
}
}
我在App.xaml中注册了它:
<Application.Resources>
<ResourceDictionary>
<converters:StringCaseConverter x:Key="StringToLowerCaseConverter" IsUpperCase="False"/>
<converters:StringCaseConverter x:Key="StringtoupperCaseConverter" IsUpperCase="True"/>
</ResourceDictionary>
</Application.Resources>
并在MainPage.xaml中使用它:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
x:Class="App1.MainPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<StackLayout Orientation="Horizontal" HorizontalOptions="Center">
<CollectionView HorizontalOptions="Center">
<CollectionView.ItemsSource>
<x:Array Type="{x:Type x:String}">
<x:String>A</x:String>
<x:String>B</x:String>
<x:String>C</x:String>
<x:String>D</x:String>
<x:String>E</x:String>
<x:String>F</x:String>
<x:String>G</x:String>
<x:String>H</x:String>
</x:Array>
</CollectionView.ItemsSource>
<CollectionView.ItemsLayout>
<LinearItemsLayout Orientation="Horizontal" ItemSpacing="20"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal" HorizontalOptions="End" VerticalOptions="Center">
<Label Text="{Binding .,Converter={StaticResource StringToLowerCaseConverter}}" HorizontalOptions="Center"/>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ContentPage>
运行应用程序时,因为var stringValue = value.ToString();
方法的value
参数为空,所以我在StringCaseConverter.cs(Convert()
)中得到了一个NullReferenceExecption。
我想念什么?
解决方法
您只需要进行空值判断即可。
public object Convert(object value,Type targetType,object parameter,CultureInfo language)
{
if (string.IsNullOrEmpty((string)value))
{
return null;
}
var stringValue = value.ToString();
return this.IsUpperCase ? stringValue.ToUpperInvariant() : stringValue.ToLowerInvariant();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。