2010-12-09 74 views
2

j'ai un DataGrid lié à un DataTable et DataGrid a une CellStyle qui change la Foreground des nombres dans les cellules en fonction de sa valeur (ou rouge négatif noir positif). Lorsque le DataTable est mis à jour, le DataGrid est correctement mis à jour, de sorte que la liaison fonctionne correctement. Le problème est que le Style est juste appliqué lorsque le DataGrid est chargé la première fois. Lorsque le DataGrid est mis à jour par la liaison, si un nombre négatif devient un nombre positif, le Foreground reste rouge au lieu de devenir noir.de style Actualiser dans DataGrid lié à datatable WPF

Est-ce que je rate quelque chose, quelque chose ou un événement?

Merci d'avance.

+0

Il est plus facile pour nous de vous aider avec une réponse si vous fournissez un exemple de code reproduisant le problème –

+0

Oui ... Un code serait certainement utile – biju

Répondre

1

Je ne sais pas comment vous essayez de faire this.Any façon dont je l'ai essayé et il fonctionne fine.Check ce code et de trouver ce qui se passe mal

Xaml:

<StackPanel Loaded="StackPanel_Loaded" > 
    <StackPanel.Resources> 
     <WpfApplication50:ValueToForegroundColorConverter x:Key="valueToForegroundColorConverter"/> 
     <DataTemplate x:Key="Valuetemplate"> 
      <TextBlock x:Name="txt" Text="{Binding Value}" Foreground="{Binding Path=Value,Converter={StaticResource valueToForegroundColorConverter}}"/> 
     </DataTemplate> 
    </StackPanel.Resources> 
    <dtgrd:DataGrid ItemsSource="{Binding Source}" 
        Name="datagrid"       
        ColumnHeaderHeight="25" 
        AutoGenerateColumns="False" 
          > 
     <dtgrd:DataGrid.Columns> 
      <dtgrd:DataGridTemplateColumn CellTemplate="{StaticResource Valuetemplate}" Header="Value"/> 
     </dtgrd:DataGrid.Columns> 
    </dtgrd:DataGrid> 
    <Button Height="30" Click="Button_Click"/> 
</StackPanel> 

et dans votre codebehind

public partial class Window10 : Window,INotifyPropertyChanged 
{ 
    private DataTable source; 
    public DataTable Source 
    { 
     get { return source; } 
     set { source = value; OnPropertyChanged("Source"); } 
    } 
    public Window10() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
    } 
    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged(string name) 
    { 
     if(PropertyChanged!=null) 
     PropertyChanged(this,new PropertyChangedEventArgs(name)); 
    } 

    #endregion 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Source.Rows.Add("-1"); 
    } 

    private void StackPanel_Loaded(object sender, RoutedEventArgs e) 
    { 
     Source = new DataTable(); 
     Source.Columns.Add("Value"); 
     Source.Rows.Add("1"); 
    } 
} 

également ce convertisseur

class ValueToForegroundColorConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     SolidColorBrush brush = new SolidColorBrush(Colors.Black); 
     int val = 0; 
     int.TryParse(value.ToString(), out val); 
     if (val < 0) 
      brush = new SolidColorBrush(Colors.Red); 
     return brush; 
    } 

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

    #endregion 
}