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

时间:2017-06-29 11:10:38

标签: xaml xamarin binding xamarin.forms datatrigger

我正在尝试检查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 https://bugzilla.xamarin.com/show_bug.cgi?id=57863

提交了错误报告

4 个答案:

答案 0 :(得分:11)

我知道这是一个旧线程,但这是解决方案:

顺便说一句,您不需要在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>

答案 1 :(得分:1)

你可以使用转换器并设置它为我工作。让我们尝试下面的代码。

转换代码

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:助手= “CLR-名称空间:myNameSpace对象”

答案 2 :(得分:1)

只需优化先前解决方案中的代码

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

答案 3 :(得分:0)

它是Xmarin Forms here

的错误