我正在尝试检查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
提交了错误报告答案 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
的错误