web-dev-qa-db-ja.com

xamarinフォームデータトリガーでオブジェクトのnull値を確認する方法は?

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=5786

9
hamalaiv

あなたはコンバーターを使用して、それに私のためにその仕事を設定することができます。以下のコードを試してみましょう。

コンバータコード

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"

3
Ziyad Godil

以前のソリューションでコードを最適化するだけ

  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;
        }
  }
1
RANJITH KUMAR

Xamarin Formsのバグです ここ

1
LeRoy