2016-04-22 52 views
0

我構建了鏈接到實體框架的WPF應用程序。如何更改ListView中單個行的顏色?

程序將用戶詳細信息添加到列表中,並將所有詳細信息存儲在數據庫中。所以無論何時關閉並重新打開應用程序,以前添加的細節都在那裏。

該應用程序具有計算平均模塊等級的功能。

這裏是我的代碼片段:

if (averageResult < 7 && averageResult > 5) 
{ 
    student.Average_Grade = "F"; 
} 

因此,如果這一條件得到滿足,我也希望該行變爲紅色或字母F變紅。

我搜索了互聯網,但只有我發現的事情是如何改變它在一個簡單的WPF應用程序沒有鏈接到數據庫。

那麼如果WPF應用程序鏈接到數據庫,如何更改ListView中單個行的顏色?

UPDATE

伊夫嘗試這種代碼:但

student.Average_Grade = "F" + new SolidColorBrush(Colors.Red); 

而不是單行改變整個窗口的顏色

LISTVIEW XAML

<ListView Grid.Row="0" x:Name="studentListView" SelectionMode="Single" Margin="10,10,-10,10" ItemsSource="{Binding}"> 
      <ListView.View> 
       <GridView> 

        <GridViewColumn x:Name="first_NameColumn" Width="80" Header="First Name"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="-6,-1" Text="{Binding First_Name, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="last_NameColumn" Width="80" Header="Last Name"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="-6,-1" Text="{Binding Last_Name, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="matric_NumberColumn" Width="80" Header="Matric Number"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="-6,-1" Text="{Binding Matric_Number, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn x:Name="component1_GradeColumn" Width="80" Header="Component 1 Grade" > 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="6,-1,-6,-1" Text="{Binding Component1_Grade, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="component2_GradeColumn" Width="80" Header="Component 2 Grade"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="-6,-1" Text="{Binding Component2_Grade, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="component3_GradeColumn" Width="80" Header="Component 3 Grade"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="-6,-1" Text="{Binding Component3_Grade, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="average_GradeColumn" Width="80" Header="Average Grade"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBox Margin="-6,-1" Text="{Binding Average_Grade, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" IsReadOnly="True"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="edit"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="Edit" Click="OnEdit"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn x:Name="delete"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="Delete" Click="OnDelete" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
      <ListView.ItemContainerStyle> 
       <Style> 
        <Setter Property="Control.HorizontalContentAlignment" Value="Stretch"/> 
        <Setter Property="Control.VerticalContentAlignment" Value="Stretch"/> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
+1

數據庫有什麼用它做。 [使用ItemTemplate](http://stackoverflow.com/a/8935831/424129)。如果你還沒有,你需要在你的Student類上實現'INotifyPropertyChanged'。 –

+0

所以根據你的邏輯,我將不得不去學生班,並對平均成績列做一些修改?一切正常,對我來說,我只是不知道如何改變顏色F – user3438350

+0

你能分享你的xaml嗎?我認爲你需要一個轉換器,它會測試條件是否被滿足並返回紅色 – Amine

回答

0

您可以使用轉換器。添加一個新類波紋管:

public class Converter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if(value.ToString() == "F") 
      return new SolidColorBrush(Colors.Red); 
     else 
      return new SolidColorBrush(Colors.Black); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

而在XAML中添加此:

<Window.Resources> // Or UserControl.Resources 
    <local:Converter x:Key="converter"/> 
</Window.Resources> 

而更換ItemContainerStyle

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="Control.HorizontalContentAlignment" Value="Stretch"/> 
     <Setter Property="Control.VerticalContentAlignment" Value="Stretch"/> 
     <Setter Property="Foreground" Value="{Binding Average_Grade, Converter={StaticResource converter}}" /> 
    </Style> 
</ListView.ItemContainerStyle> 
+0

你需要哪些進口? – user3438350

+0

doest work,sory – user3438350

+0

你可以給更多détails!你有任何錯誤,例外嗎? – Amine

相關問題