2016-04-22 6 views
0

Entity FrameworkにリンクされたWPFアプリケーションを構築しました。ListViewで1行の色を変更するにはどうすればよいですか?

プログラムはユーザーの詳細をリストに追加し、すべての詳細はデータベースに保存されます。したがって、アプリケーションを終了して再度開くと、以前に追加された詳細が表示されます。

このアプリケーションには、平均モジュールグレードを計算する機能があります。ここで

私のコードの断片である。この条件が満たされるのであれば、私はまた、行が赤を回すために赤や手紙Fを回したい

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

私はインターネットを検索しましたが、私が見つけたのは、データベースにリンクされていない単純なWPFアプリケーションでそれを変更する方法だけです。

WPFアプリケーションがデータベースにリンクされている場合、ListViewの1行の色をどのように変更しますか?

UPDATE

アイブは、このコードを試みた:

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

をしかし、その代わりに単一の行のあるウィンドウ全体の色

リストビュー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

データベースは、それとは何の関係もないItemContainerStyleを交換してください。 [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> 

そして

<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

もっとデテールを教えていただけますか?例外はありますか? – Amine

関連する問題