为什么我的DataTrigger不能在我的Xamarin Forms应用程序中工作?
问题描述:
遵循Xamarins网站围绕DataTriggers
的文档,我想在我的ListView中实现一个解决方案,该解决方案将检查label
是否有任何文本。如果Text.Length
为0,则根据我的代码使用Setters
设置BoxView
。为什么我的DataTrigger不能在我的Xamarin Forms应用程序中工作?
<Label x:Name="forward_label" Text="{Binding next_charterer_info}" />
<BoxView x:Name="forward_alert"
BackgroundColor="Red">
<BoxView.Triggers>
<DataTrigger TargetType="BoxView"
Binding="{Binding Source={x:Reference forward_label},
Path=Text.Length}" Value="0">
<Setter Property="BackgroundColor" Value="White" />
</DataTrigger>
</BoxView.Triggers>
</BoxView>
所以你可以看到我有检查了它的text.length
标签,如果是0,则BoxView
的BackgroundColor
设置为白色。当我运行应用程序时,它不起作用。这种情况似乎从未得到满足。绑定的数据要么有一个值,要么返回空字符串。
任何人都可以帮助我解决这个问题。
答
您是否尝试过使用ValueConverter,我认为这可能是一个更简单的解决方案。
using Xamarin.Forms;
namespace YourProject.Converters
{
public class StringLengthToColorConverter : IValueConverter
{
public Color EmptyColor { get; set; }
public Color DefaultColor { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || String.IsNullOrEmpty(value.ToString()))
{
return EmptyColor;
}
return DefaultColor;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
和你的页面应该像...
<Page.Resources>
<ResourceDictionary>
<conv:StringLengthToColorConverter x:Key="StringLengthToColorConverter" EmptyColor="White" DefaultColor="Red" />
</ResourceDictionary>
</Page.Resources>
<Label x:Name="forward_label" Text="{Binding next_charterer_info}" />
<BoxView x:Name="forward_alert"
BackgroundColor="{Binding next_charterer_info,Converter={StaticResource StringLengthToColorConverter}}">
</BoxView>