2017-06-16 60 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> 
相關問題