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

ham*_*aiv 9 xaml binding datatrigger xamarin xamarin.forms

我正在尝试检查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>
Run Code Online (Sandbox Code Playgroud)

有谁知道这样做的方法?我只在Android上测试了这个.

编辑:我已向xamarin bugzilla提交了错误报告https://bugzilla.xamarin.com/show_bug.cgi?id=57863

lin*_*ory 17

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

顺便说一句,您不需要Isvisible="True"在 StackLayout 中,因为默认值为 true。

<StackLayout IsVisible="True">
    <StackLayout.Triggers>
        <DataTrigger TargetType="StackLayout"
                        Binding="{Binding MyObject, TargetNullValue=''}"
                        Value="">
            <Setter Property="IsVisible" Value="False"></Setter>
        </DataTrigger>
    </StackLayout.Triggers>

    ...

</StackLayout>
Run Code Online (Sandbox Code Playgroud)


Ziy*_*dil 4

您可以使用转换器并将其设置为对我有用。让我们尝试下面的代码。

转换器代码

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

并与 IsVisible 属性绑定,如下所示:

<StackLayout IsVisible="{Binding Registerclosure.Notes, Converter={Helpers:NullValueBoolConverter}}">
</StackLayout>
Run Code Online (Sandbox Code Playgroud)

不要忘记标题中的以下行

xmlns:Helpers="clr-namespace:MyNameSpace"