Перебрать все ячейки в Xceed DataGrid для WPF? - PullRequest
1 голос
/ 21 января 2010

Я изменяю цвет фона ячеек, когда пользователь внес изменения. Я хотел бы вернуть все ячейки в нормальные цвета, когда изменения будут сохранены (или отменены).

Достаточно просто установить исходный цвет фона ячейки (сохраненный в родительской строке). Но я не могу понять, как перебрать все ячейки таблицы, чтобы сбросить их.

Я нашел в Базе знаний Xceed статью " Как перебирать строки сетки " ... которая, по вашему мнению, была бы идеальной, верно? Неправильно; свойства (или методы), такие как .DataRows, .FixedHeaderRows и т. д., упомянутые в статье, относятся к более старого / несуществующего продукта Xceed .

Эта ветка форума рекомендует использовать свойство DataGrid .Items, которое в моем случае возвращает коллекцию System.Data.DataRowView s ... но я не могу найти ни одного способ приведения этого (или любого из связанных с ним элементов) до Xceed.Wpf.DataGrid.DataCell s Мне нужно изменить цвет фона.

Короче говоря, как мне перебрать строки и ячейки, чтобы я мог сбросить свойство background?

Ответы [ 3 ]

4 голосов
/ 19 апреля 2010

Вопрос был решен благодаря Мохамеду, сотруднику Xceed, который разместил на форумах Xceed . Пример кода следующий:

foreach (object item in this.DataGrid1.Items)
{
    Dispatcher.BeginInvoke(new Action<object>(RemoveRowHighlights), DispatcherPriority.ApplicationIdle, item);
}
...
private void RemoveRowHighlights(object item)
{
    Xceed.Wpf.DataGrid.DataRow row = this.DataGrid1.GetContainerFromItem(item) as Xceed.Wpf.DataGrid.DataRow;
    if (row != null) foreach (Xceed.Wpf.DataGrid.DataCell c in row.Cells)
    {
        if (c != null) c.Background = row.Background;
    }
}
1 голос
/ 18 апреля 2010

Я предлагаю изменить бизнес-логику, чтобы вместо нее использовать привязку данных.

Тогда каждая ячейка в вашей сетке данных будет объектом, который сам знает, был ли он отредактирован или нет. И тогда вы можете привязать данные к этому свойству, и, следовательно, когда вы сохраняете и сбрасываете все свои объекты, статус также будет обновляться в вашем графическом интерфейсе.

Кроме того, вы получаете разделение интересов бесплатно. Ваш графический интерфейс теперь решает, как все должно выглядеть, а не то, какой должна быть бизнес-логика отслеживания сохраненных / не сохраненных.

0 голосов
/ 19 сентября 2016

Рекомендованный способ сделать это - через неявный триггер стиля (из-за виртуализации пользовательского интерфейса), и все свойства в Xceed DataGrid могут быть установлены, кроме свойств, наложенных темой, определенной в DataGrid.

например. :

  <Style TargetType="{x:Type xcdg:DataCell }">
     <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsDirty}"
                     Value="True">
           <Setter Property="Background"
                   Value="DeepSkyBlue" />
        </DataTrigger>
     </Style.Triggers>
  </Style>
...