Сеть данных WPF Цвет ячейки в зависимости от предшествующего значения ячейки

Общие сведения

Я разрабатываю приложение для торговли акциями. Которые, очевидно, следят за рынком. Я разрабатываю эти рыночные часы, используя Datagrid .

Что делает Grid? Он отображает ценовые ориентиры акции. Каждый раз, когда стоимость акций увеличивается, передний план конкретной ячейки становится зеленым. если он уменьшается, он становится красным.

Что я сделал? Я пробовал использовать метод преобразования значений и проблему с несколькими привязками

. Преобразователь значений выдает только текущее значение. Как передать старое значение этому конвертеру.

Код:

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

Конвертер

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);
    }
}
5
задан blindmeis 29 May 2011 в 07:59
поделиться