Подсветка строк / столбцов / ячеек WPF DataGrid - PullRequest
4 голосов
/ 19 декабря 2010

Я использую данные diff в моем проекте, и теперь у меня есть необходимость показывать свои результаты пользователю. (Я проверяю два массива произвольных данных и нахожу в них несоответствия, мои результаты выглядят примерно так: «Статус: несоответствие, Свойство: ... Индекс: ...» (некоторый класс)). Так что сейчас он работает довольно хорошо, сначала я подумал, что будет легко выделить результаты в DataGrid, но когда я начал реализовывать это, я понял, что просто не представляю, как это сделать ... Мне нужно выделить предустановки ячейки и строки ... Существует ли какое-либо общее решение? P.S DataGrid является привязкой к некоторым данным (используя представления). У меня нет большого опыта работы с WPF, поэтому я не хочу изобретать велосипед, думаю, что что-то должно существовать (решение, проект с открытым исходным кодом, примеры кода).

1 Ответ

4 голосов
/ 19 декабря 2010

Вот пример того, что вам нужно.

  1. Я предполагаю, что ChangeItem - это класс для хранения одной строки.Таким образом, в xaml вы привязываете ChangeItem[] к ItemsSource свойству вашей таблицы данных.

    class ChangeItem
    {
        public string Previous { get; set; }
        public string Current  { get; set; }
        public bool HasDiff { return this.Previous != this.Current; } 
    }
    
  2. В Xaml добавьте специальный стиль к своим ресурсам

    <Style TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
           <DataTrigger Binding="{Binding HasDiff}" Value="true">
              <Setter Property="Background" Value="Red"/>
           </DataTrigger>
        </Style.Triggers>
    </Style>
    
  3. Если вам требуется поддержка редактирования и изменения фона в реальном времени, в зависимости от внесенных изменений.Затем правильно реализуйте INotifyPropertyChanged в классе ChangeItem.

  4. Если вам нужно иметь более двух состояний (HasError / NoErrors), то создайте новое перечисление, представляющее состояния,Например:

    public enum LineState
    {
         Normal,
         SmallError,
         MegaError,
    }
    

    И замените свойство public bool HasDiff { ... } чем-то вроде public LineState State { ... }.

Надеюсь, это поможет.

...