2010-12-09 16 views
2

Ich habe ein DataGrid gebunden an ein DataTable und die DataGrid hat eine Cellstyle, die die Foreground der Zahlen in den Zellen in Abhängigkeit von seinem Wert (positiv oder negativ schwarz-rot) ändert. Wenn die DataTable aktualisiert wird, wird die DataGrid ordnungsgemäß aktualisiert, so dass die Bindung funktioniert. Das Problem ist, dass die Style nur angewendet wird, wenn die DataGrid das erste Mal geladen wird. Wenn die DataGrid durch die Bindung aktualisiert wird, bleibt die Foreground, wenn eine negative Zahl positiv wird, rot, anstatt schwarz zu werden.Refresh Stil in Datagrid Datatable WPF gebunden

Fehle ich etwas, irgendeine Eigenschaft oder Ereignis?

Vielen Dank im Voraus.

+0

Es ist einfacher für uns, Ihnen bei der Antwort zu helfen, wenn Sie einen Beispielcode zur Verfügung stellen, der das Problem reproduziert. –

+0

Ja ... Irgendein Code wäre sicherlich hilfreich – biju

Antwort

1

Ich bin nicht sicher, wie Sie this.Any Art und Weise zu tun versuchen ich versucht habe und es funktioniert fine.Check dieser Code und herauszufinden, was falsch

XAML wird:

<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> 

und in Ihrem Code-Behind

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"); 
    } 
} 

auch dieser Konverter

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 
} 
Verwandte Themen