Antecedentes.WPF datagrid Color de la celda según el valor de la celda preivous
Estoy desarrollando una aplicación de negociación bursátil. que obviamente tienen una vigilancia del mercado. Estoy desarrollando esta vigilancia del mercado usando Datagrid
.
¿Qué hace la rejilla? Muestra los puntos de precio de una acción. Cada vez que aumenta el valor de una acción, el primer plano de la celda particular cambia a verde si disminuye se vuelve rojo.
¿Qué hice? He intentado utilizar el método del convertidor de valores y multibinding
Problema. El convertidor de valor solo proporciona el valor actual. ¿Cómo puedo pasar el valor anterior a ese convertidor?
Código:
<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>
convertidor
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);
}
}
gracias, pero me puede proporcionar un ejemplo. Como soy nuevo en WPF, no entiendo cómo enlazar objetos a la cuadrícula de datos. – Megatron
No creo que 'DataRowVersion' sea la solución. Eso es útil cuando necesita acceder a la versión recibida de la base de datos y la versión local modificada. Lo que quiere el OP es el valor antiguo de la base de datos y el nuevo valor de la base de datos. – svick