2017-01-28 1 views
1

Actuellement ceci est ma liste XAML: J'ai fait beaucoup de recherche mais je n'ai pas pu trouver la solution à ceci, votre aide sera appréciée, merci.Wpf - Changement de couleur de colonne de texte sage sur l'entrée aléatoire

<ListView x:Name="listView_data" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="20,0,20,5" Width="712" Height="357"> 
     <ListView.View> 
      <GridView x:Name="lvgvc"> 
       <TextBlock.Foreground> 
        <SolidColorBrush Color="black"></SolidColorBrush> 
       </TextBlock.Foreground> 
      </GridView> 
     </ListView.View> 
    </ListView> 

ce qui est de code-behind:

//received data in DataTable (dt) 
    for(int i=0; i < dt.Columns.Count; i++) 
        { 
         GridViewColumn gvc = new GridViewColumn(); 
         gvc.Header = "Column"+i; 
         gvc.Width = 100; 
         gvc.DisplayMemberBinding = new Binding("column"+i); 
         lvgvc.Columns.Add(gvc);  
        } 

       listView_data.Items.Clear(); 
       listView_data.ItemsSource = dt.DefaultView; 

Listview crée les colonnes et renseigne le datatTable. Mais les rangées sont complètement blanches. Je peux sélectionner 6 lignes dans listview car il y a six lignes dans dataTable et pendant le débogage DataTable montre les données correctes dedans. Comment puis-je rendre la couleur du bloc de texte noire dans ListView. je veux le bloc de texte selon la colonne d'entrée aléatoire sage.

+0

Regardez le paramètre ListView.ItemContainerStyle. Google pour des exemples concrets de style des éléments ListView. Ne tapez pas simplement XAML arbitraire dans des endroits arbitraires. Cette méthode pourrait prendre des années. Trouver un exemple de travail. Basez votre code sur un exemple de travail. –

Répondre

1

Le chemin du DisplayMemberBinding doit être réglé sur le nom de la colonne:

for (int i = 0; i < dt.Columns.Count; i++) 
{ 
    GridViewColumn gvc = new GridViewColumn(); 
    gvc.Header = "Column" + i; 
    gvc.Width = 100; 
    gvc.DisplayMemberBinding = new Binding(dt.Columns[0].ColumnName); 
    lvgvc.Columns.Add(gvc); 
} 

listView_data.Items.Clear(); 
listView_data.ItemsSource = dt.DefaultView; 

Et la couleur du texte dans les colonnes peut être modifiée en définissant un ItemContainerStyle dans le balisage XAML:

<ListView x:Name="listView_data"> 
    <ListView.View> 
     <GridView x:Name="lvgvc"/> 
    </ListView.View> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Foreground" Value="Black" /> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

Si vous voulez différentes couleurs dans différentes colonnes, vous pouvez créer un DataTemplate pour chaque colonne programme:

const string dataTemplate = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"><TextBlock Text=\"{{Binding {0}}}\" Foreground=\"{1}\" /></DataTemplate>"; 

for (int i = 0; i<dt.Columns.Count; i++) 
{ 
    string colour = "Green"; ///change this one based on your colouring logic... 
    DataTemplate template = System.Windows.Markup.XamlReader.Parse(string.Format(dataTemplate, dt.Columns[0].ColumnName, colour)) as DataTemplate; 
    GridViewColumn gvc = new GridViewColumn() { CellTemplate = template }; 
    gvc.Header = "Column" + i; 
    gvc.Width = 100; 
    lvgvc.Columns.Add(gvc); 
} 

listView_data.Items.Clear(); 
listView_data.ItemsSource = dt.DefaultView; 
+0

Merci! ça a marché. – ARr0w