如何检查Xamarin中的对象null值形成数据触发



我正在尝试检查binding对象值是否在Xamarin表单XAML DataTrigger中为无效,但我无法使其工作。我尝试了以下内容:

<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

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

btw,您在stacklayout中不需要Isvisible="True",因为默认值是正确的。

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

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

转换器代码

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

并与以下类似的可见属性结合:

<StackLayout IsVisible="{Binding Registerclosure.Notes, Converter={Helpers:NullValueBoolConverter}}">
</StackLayout>

不要忘记标头的下方

xmlns:helpers =" clr-namespace:mynamespace"

它的错误在此处

仅在上一个解决方案中优化代码

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

最新更新