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
あなたはコンバーターを使用して、それに私のためにその仕事を設定することができます。以下のコードを試してみましょう。
コンバータコード
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"
以前のソリューションでコードを最適化するだけ
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;
}
}
Xamarin Formsのバグです ここ