2010-07-22 4 views
2

J'ai un DataGrid avec une configuration DataTrigger, donc quand sa valeur est "UP" je voudrais que le déclencheur change seulement l'arrière-plan dans la colonne de données 'directionColumn' seulement. Ce que j'ai jusqu'à maintenant met à jour la rangée entière. J'ai aussi essayé de placer "targetname" dans l'élément setter mais cela donne juste une erreur. S'il vous plaît aider.WPF Datatrigger pour DataGrid ne changeant que la ligne entière

XAML:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Name="summaryReportDataGridDATE" RowDetailsVisibilityMode="VisibleWhenSelected" Width="330"> 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Direction}" Value="UP"> 
        <Setter> 
         <Setter.Property>Background</Setter.Property> 
         <Setter.Value>Red</Setter.Value> 
        <!--<Setter Property="Background" Value="Red" TargetName="directionColumn"/>--> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.CellStyle> 
    <DataGrid.Columns> 
     <!--<DataGridTemplateColumn x:Name="dateColumn" Header="Date" Width="100" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" > 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <DatePicker SelectedDate="{Binding Path=Date, Mode=OneWay}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn>--> 

     <DataGridTextColumn x:Name="dateColumn" Binding="{Binding Path=Date, StringFormat={}{0:dd/MM/yyyy}}" Header="Date" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT"/> 
     <DataGridTextColumn x:Name="closeColumn" Binding="{Binding Path=ClosingPrice}" Header="ClosingPrice" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" /> 
     <DataGridTextColumn x:Name="directionColumn" Binding="{Binding Path=Direction}" Header="Direction" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" /> 
     <DataGridTextColumn x:Name="resultColumn" Binding="{Binding Path=Result}" Header="Result" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" /> 
    </DataGrid.Columns> 
</DataGrid> 

Répondre

6

Que diriez-vous d'un TemplateColumn au lieu de style de cellule personnalisée:

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Name="summaryReportDataGridDATE" RowDetailsVisibilityMode="VisibleWhenSelected" Width="330">      
     <DataGrid.Columns> 
      <DataGridTextColumn x:Name="dateColumn" Binding="{Binding Path=Date, StringFormat={}{0:dd/MM/yyyy}}" Header="Date" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT"/> 
      <DataGridTextColumn x:Name="closeColumn" Binding="{Binding Path=ClosingPrice}" Header="ClosingPrice" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" /> 
      <DataGridTemplateColumn x:Name="directionColumn" Header="Direction" Width="80" CanUserReorder="False" CanUserSort="False" > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock x:Name="directionColumnTextBlock" Text="{Binding Path=Direction}" Width="80" FontFamily="Arial Rounded MT"/> 
         <DataTemplate.Triggers> 
          <DataTrigger Binding="{Binding Path=Direction}" Value="UP"> 
           <Setter TargetName="directionColumnTextBlock" Property="Background" Value="Red" /> 
          </DataTrigger> 
         </DataTemplate.Triggers> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn>                    
      <DataGridTextColumn x:Name="resultColumn" Binding="{Binding Path=Result}" Header="Result" Width="80" CanUserReorder="False" CanUserSort="False" FontFamily="Arial Rounded MT" /> 
     </DataGrid.Columns> 
    </DataGrid> 
+0

Great! Je vous remercie. – Chris

Questions connexes