Xaml 如何检查xamarin表单数据触发器中的对象空值?

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}"

我试图检查Xamarin Forms XAML DataTrigger中的绑定对象值是否为null,但我无法让它工作。我尝试了以下方法:

<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您是否看到了特定错误,或者它没有按预期工作?