2016-12-10 3 views
1

Интересно, как я мог изменить цвет текстового элемента в списке по условию. Неважно, если это цвет фона или текст, я просто хочу выделить некоторые строки в зависимости от условия. Мой пример кода ниже.Как я могу изменить textcoroul или цвет фона TextCell в ListView при условии

<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

Вы, вероятно, хотите сделать это Databinding, а также. Взгляните на 'ValueConverters' или Выбор шаблонов –

+0

Спасибо! Выбор шаблона помог много, я пробовал ValueConverter раньше, но он не работал – George

ответ

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> 

И в Заявке (что ваш Vlist имеет) я бы собственность с, что имеет тип Color (тот, который находится внутри xamarin.forms библиотеки), которые вы можете контролировать.

+0

Спасибо, но я уже использовал Template Selector и это то, что мне нужно. – 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; 
     } 
    }