1

当用户进行编辑时,我正在更改单元格的背景颜色。保存(或还原)更改后,我想将所有单元格恢复为正常颜色。

设置单元格的原始背景颜色(存储在父行中)很容易。但我不知道如何遍历表中的所有单元格来重置它们。

我在 Xceed 知识库中找到了一篇名为“如何遍历网格的行”的文章……您认为这将是完美的,对吧?错误的; 文章中提到的 , 等属性(或方法)来自.DataRows较旧/已停产的 Xceed 产品.FixedHeaderRows

此论坛主题建议使用 DataGrid 的 .Items 属性,在我的情况下,它返回System.Data.DataRowView的集合......但我找不到任何方法将其(或其任何相关元素)转换为Xceed.Wpf.DataGrid.DataCell s 我需要更改背景颜色。

简而言之,如何循环遍历行和单元格以便重置背景属性?

4

3 回答 3

4

多亏了在 Xceed 论坛上发帖的 Xceed 员工 Mohamed,这个问题已经得到解决。示例代码如下:

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;
    }
}
于 2010-04-19T17:39:07.717 回答
1

我建议您更改业务逻辑以改用数据绑定。

然后,数据网格中的每个单元格都是一个对象,它本身知道它是否已被编辑。然后您可以将数据绑定到该属性,因此当您保存并重置所有对象时,状态也将在您的 gui 中更新。

此外,您还可以免费获得关注点分离。现在,您的 GUI 决定事情的外观,而不是跟踪已保存/未保存的业务逻辑应该是什么。

于 2010-04-18T03:45:32.813 回答
0

推荐的方法是通过隐式样式触发器(因为 UI 虚拟化),并且 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>
于 2016-09-19T15:29:04.147 回答