为什么我的DataTrigger无法在我的Xamarin Forms应用程序中运行?

时间:2017-06-16 13:51:31

标签: android ios xaml xamarin

根据Xamarins网站DataTriggers周围的文档,我想在我的ListView中实现一个解决方案,该解决方案将检查label是否包含任何文本。如果Text.Length为0,则根据我的代码使用BoxView设置Setters样式。

<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,则BackgroundColor的{​​{1}}设置为白色。当我运行应用程序时,它不起作用。这种情况似乎永远不会得到满足。绑定数据具有值或返回空字符串。

任何人都可以帮助我解决这种方法出错的问题。

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用 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>