2017-06-16 77 views
0

遵循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,则BoxViewBackgroundColor设置为白色。当我运行应用程序时,它不起作用。这种情况似乎从未得到满足。绑定的数据要么有一个值,要么返回空字符串。

任何人都可以帮助我解决这个问题。

回答

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> 
相关问题