2013-09-13 4 views
0

У меня есть три массива данных, которые будут заселить ListView что DisplayMemberBindingLogic в ListView для связывания предметов

Могу ли я добавить логику привязок элемента, чтобы изменить ListView переднего плана или фона Собственость клетки?

Xaml:

<Grid> 

    <ListView x:Name="carList" VerticalAlignment="Top"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Car" DisplayMemberBinding="{Binding Name}" Width="Auto"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Make}" Header="Make" Width="Auto"/> 
       <GridViewColumn DisplayMemberBinding="{Binding Year}" Header="Year" Width="Auto"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

    <Button x:Name="generate" Content="Parse" Click="generate_Click" Margin="0,5,5,5" DockPanel.Dock="Top" VerticalAlignment="Bottom" HorizontalAlignment="Right"/> 

</Grid> 

CS:

public MainWindow() 
{ 
    InitializeComponent(); 
} 

public class Car 
{ 
    public string Name { get; set; } 
    public string Make { get; set; } 
    public string Year { get; set; } 
} 

private void generate_Click(object sender, RoutedEventArgs e) 
{ 
    int i = 0; 
    string[] name = { "Sentra", "IS", "Camry" }; 
    string[] make = { "Nissan", "Lexus", "Toyota" }; 
    string[] year = { "2003", "2011", "2013" }; 

    foreach (string s in name) 
    { 
     Car car = new Car(); 
     car.Name = name[i]; 
     car.Make = make[i]; 
     car.Year = year[i]; 

     if (year[i] == "2013") 
     { 
      //Do something here 
      //Make bold, change color, etc. 
     } 

     carList.Items.Add(car); 

     i++; 
    } 
} 

ответ

1

Вы можете сделать это в XAML:

<ListView x:Name="carList" VerticalAlignment="Top">     
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Car" DisplayMemberBinding="{Binding Name}" Width="Auto"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Make}" Header="Make" Width="Auto"/> 
      <GridViewColumn Header="Year" Width="Auto"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Year}"> 
          <TextBlock.Style> 
           <Style TargetType="TextBlock"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding Year}" Value="2013"> 
              <Setter Property="Background" Value="Blue" /> 
              <Setter Property="Foreground" Value="Yellow" /> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </TextBlock.Style> 
         </TextBlock> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

Результат:

enter image description here

Второе решение:

Вы можете создать класс для свойств стиля.

public class CarProperty 
{ 
    public SolidColorBrush Background { get; set; } 
    public SolidColorBrush Foreground { get; set; } 
    public FontWeight FontWeight { get; set; } 
} 

Теперь вы можете добавить для каждого свойства в классе автомобилей, соответствующий CarProperty собственности:

public class Car 
{ 
    public Car() 
    { 
     YearProperty = new CarProperty 
     { 
      Background = new SolidColorBrush(Colors.Transparent), 
      Foreground = new SolidColorBrush(Colors.Black), 
      FontWeight = FontWeights.Normal 
     }; 
    } 
    public string Name { get; set; } 
    public string Make { get; set; } 
    public string Year { get; set; } 
    public CarProperty YearProperty { get; set; } 
} 

generate_Click:

private void generate_Click(object sender, RoutedEventArgs e) 
{ 
    int i = 0; 
    string[] name = { "Sentra", "IS", "Camry" }; 
    string[] make = { "Nissan", "Lexus", "Toyota" }; 
    string[] year = { "2003", "2011", "2013" }; 

    foreach (string s in name) 
    { 
     Car car = new Car(); 
     car.Name = name[i]; 
     car.Make = make[i]; 
     car.Year = year[i]; 

     if (year[i] == "2013") 
     { 
      car.YearProperty = new CarProperty(); 
      car.YearProperty.Background = new SolidColorBrush(Colors.Blue); 
      car.YearProperty.Foreground = new SolidColorBrush(Colors.Yellow); 
      car.YearProperty.FontWeight = FontWeights.Bold; 
     } 

     carList.Items.Add(car); 

     i++; 
    } 
} 

XAML:

<ListView x:Name="carList" VerticalAlignment="Top">     
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Car" DisplayMemberBinding="{Binding Name}" Width="Auto"/> 
      <GridViewColumn DisplayMemberBinding="{Binding Make}" Header="Make" Width="Auto"/> 
      <GridViewColumn Header="Year" Width="Auto"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Year}"> 
          <TextBlock.Style> 
           <Style TargetType="TextBlock"> 
            <Setter Property="Background" Value="{Binding YearProperty.Background}" /> 
            <Setter Property="Foreground" Value="{Binding YearProperty.Foreground}" /> 
            <Setter Property="FontWeight" Value="{Binding YearProperty.FontWeight}" /> 
           </Style> 
          </TextBlock.Style> 
         </TextBlock> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

Спасибо. Кажется, это работает на некотором уровне. Я ищу что-то более программное, так как я хотел бы поставить логику для разных значений и иметь разные цвета. – MCSharp

+0

@MiddleCSharp снова проверьте мой ответ :) – kmatyaszek

+0

Спасибо! Этот метод обладает большей гибкостью. – MCSharp

Смежные вопросы