我正在尝试检查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;
}
}