Xaml 如何检查xamarin表单数据触发器中的对象空值?
我试图检查Xamarin Forms XAML DataTrigger中的绑定对象值是否为null,但我无法让它工作。我尝试了以下方法:Xaml 如何检查xamarin表单数据触发器中的对象空值?,xaml,xamarin,binding,xamarin.forms,datatrigger,Xaml,Xamarin,Binding,Xamarin.forms,Datatrigger,我试图检查Xamarin Forms XAML DataTrigger中的绑定对象值是否为null,但我无法让它工作。我尝试了以下方法: <StackLayout IsVisible="True"> <StackLayout.Triggers> <DataTrigger TargetType="StackLayout" Binding="{Binding MyObject}"
<StackLayout IsVisible="True">
<StackLayout.Triggers>
<DataTrigger TargetType="StackLayout"
Binding="{Binding MyObject}"
Value="{x:Null}">
<Setter Property="IsVisible" Value="False"></Setter>
</DataTrigger>
</StackLayout.Triggers>
...
</StackLayout>
...
有人知道怎么做吗?我只在Android上测试过这个
编辑:我已经向xamarin bugzilla提交了一份bug报告您可以使用converter并为我设置它的工作。让我们试试下面的代码 转换器代码
public class NullValueBoolConverter: IValueConverter, IMarkupExtension
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string)
{
if (string.IsNullOrEmpty(value as string))
{
return false;
}
else
{
return true;
}
}
else
{
if (value == null)
{
return false;
}
else
{
return true;
}
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
public object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
并使用IsVisible属性绑定,如下所示:
<StackLayout IsVisible="{Binding Registerclosure.Notes, Converter={Helpers:NullValueBoolConverter}}">
</StackLayout>
不要忘记标题中的行下方
xmlns:Helpers=“clr namespace:MyNameSpace”这是Xmarin表单的一个错误,只是在以前的解决方案中优化了代码
public class NullValueBoolConverter : IValueConverter, IMarkupExtension
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string)
{
string val = value as string;
return !string.IsNullOrEmpty(val);
}
return !(value == null);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
public object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
我知道这是一个旧线程,但解决方案如下: 顺便说一句,您不需要在StackLayout中使用
Isvisible=“True”
,因为默认值为True
<StackLayout IsVisible="True">
<StackLayout.Triggers>
<DataTrigger TargetType="StackLayout"
Binding="{Binding MyObject, TargetNullValue=''}"
Value="">
<Setter Property="IsVisible" Value="False"></Setter>
</DataTrigger>
</StackLayout.Triggers>
...
</StackLayout>
...
您是否收到任何错误?其他绑定是否正常工作,也就是说,它是否确实试图检查null,这就是问题所在?我没有看到任何错误,是的,其他绑定工作正常。我刚刚测试了它,也遇到了相同的问题…可能是Xamarin错误。一种解决方法是使用实现IValueConverter的转换器?感谢您的测试。转换器可能是一个很好的解决方法。我向xamarin bugzilla提交了一个bug:是的,我提交了。我现在编辑了这个问题,以包含bugreport链接。如果绑定为null,则不会调用转换器,这是由xamarin designFYI生成的-TargetNullValue=''在我尝试在标签上使用xamarin Forms 5+时似乎出现了中断。@nixkuroi您是否看到了特定错误,或者它没有按预期工作?