Arrière-plan.WPF dataagrid Couleur de la cellule en fonction de la valeur de la cellule précisée
Je développe une application de négociation d'actions. Qui a évidemment une surveillance du marché. Je développe cette veille de marché en utilisant Datagrid
.
Que fait la grille? Il affiche les points de prix d'un stock. Chaque fois qu'une valeur de stock augmente, le premier plan de la cellule devient vert s'il diminue, il devient rouge.
Qu'est-ce que j'ai fait? J'ai essayé d'utiliser la méthode du convertisseur de valeur et la liaison multiple
Problème. Le convertisseur de valeur donne uniquement la valeur actuelle. Comment puis-je passer l'ancienne valeur à ce convertisseur.
code:
<wpfTlKit:DataGrid.CellStyle>
<Style TargetType="{x:Type wpfTlKit:DataGridCell}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource myHighlighterConverter}"
>
<MultiBinding.Bindings>
<Binding RelativeSource="{RelativeSource Self}"></Binding>
<Binding Path="Row" Mode="OneWay"></Binding>
<Binding ElementName="OldData" Path="Rows"></Binding>
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</wpfTlKit:DataGrid.CellStyle>
Converter
public class HighlighterConverter : IMultiValueConverter
{
#region Implementation of IMultiValueConverter
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values[1] is DataRow)
{
//Change the background of any cell with 1.0 to light red.
var cell = (DataGridCell)values[0];
var row = (DataRow)values[1];
var columnName = cell.Column.SortMemberPath;
if (row[columnName].IsNumeric() && row[columnName].ToDouble() == 1.0)
return new SolidColorBrush(Colors.LightSalmon);
}
return SystemColors.AppWorkspaceColor;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
#endregion
}
public static class Extensions
{
public static bool IsNumeric(this object val)
{
double test;
return double.TryParse(val.ToString(), out test);
}
public static double ToDouble(this object val)
{
return Convert.ToDouble(val);
}
}
merci, mais pouvez-vous me donner un exemple. étant nouveau pour WPF, je ne comprends pas comment lier des objets à datagrid. – Megatron
Je ne pense pas que 'DataRowVersion' soit la solution. C'est utile lorsque vous avez besoin d'accéder à la version reçue de la base de données et de la version locale modifiée. Ce que l'OP veut, c'est l'ancienne valeur de la base de données et la nouvelle valeur de la base de données. – svick