2016-12-10 1 views
1
ändern?

Ich frage mich, wie könnte ich eine Farbe der Textzelle in einer ListView durch Bedingung ändern. Es spielt keine Rolle, ob es eine Hintergrundfarbe oder eine Textfarbe ist, ich möchte nur einige Zeilen markieren, abhängig von der Bedingung. Mein Codebeispiel unten.Wie kann ich einen TextColor oder eine Hintergrundfarbe einer TextCell in einem ListView unter der Bedingung

<ListView x:Name="lstData" HasUnevenRows="false" Footer="Footer" ItemSelected="OnSelection" > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <TextCell Text="{Binding OrderId}" Detail="{Binding OrderState}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <ListView.FooterTemplate> 
     <DataTemplate> 
     <StackLayout Orientation="Horizontal" Padding="5,5,5,5"> 
      <Button Text="New Order" Clicked="OnNewOrderClicked" /> 
     </StackLayout> 
     </DataTemplate> 
    </ListView.FooterTemplate> 
    </ListView> 

    public ManageOrder() 
    { 
     InitializeComponent(); 
     var vList = App.orderDatabase.GetAllOrders(); 
     lstData.ItemsSource = vList; 

     for(int i=0; i < vList.Count(); i++) 
     { 
      if(vList[i].IsDispatched == false) 
      { 
     // **Change colour of text view** 
      } 

     }   
    } 
+0

Sie wollen wahrscheinlich, es zu tun, indem sie auch die Datenbindung. Werfen Sie einen Blick auf 'ValueConverters' oder die Template Selectors –

+0

Danke! Template Selector hat mir sehr geholfen, ich habe versucht, ValueConverter vorher, aber es hat nicht funktioniert – George

Antwort

0
<ListView x:Name="lstData" HasUnevenRows="false" Footer="Footer" ItemSelected="OnSelection" > 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <TextCell Text="{Binding OrderId}" Detail="{Binding OrderState}" TextColor= "{Binding StateColor}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <ListView.FooterTemplate> 
     <DataTemplate> 
     <StackLayout Orientation="Horizontal" Padding="5,5,5,5"> 
      <Button Text="New Order" Clicked="OnNewOrderClicked" /> 
     </StackLayout> 
     </DataTemplate> 
    </ListView.FooterTemplate> 
    </ListView> 

und in der Reihenfolge (die Ihr vlist ist hat) ich eine Immobilie mit einem haben würde, die vom Typ Farbe ist (die, die im Innern ist xamarin.forms Bibliothek), die Sie steuern können.

+0

Danke, aber ich habe bereits Template Selector und das, was ich brauche. – George

0
You can achieve your requirement by using IValueConverter. 

    <ContentPage.Resources> 
     <ResourceDictionary> 
      <local:Class1 x:Key="class1" /> 
     </ResourceDictionary> 
    </ContentPage.Resources> 

<ListView x:Name="lstData"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextCell Text="{Binding OrderId}" TextColor="{Binding Colors, Converter={StaticResource class1}}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

//Converter class 

    public class Class1 : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if ((int)value > 1000) 
       return Color.Green; 
      else 
       return Color.Red; 

     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value; 
     } 
    } 
Verwandte Themen