【问题标题】:Silverlight 4 Datagrid, Set RowBackgroundSilverlight 4 Datagrid,设置 RowBackground
【发布时间】:2011-06-03 01:47:46
【问题描述】:

我知道数据网格并非旨在直接访问每一行。我的问题是我需要根据某些条件突出显示行,而不仅仅是在加载时。加载网格后,集合可能会发生更改,而该集合不是填充网格的集合,因此对此集合的更改显然不会影响网格。

示例数据图:

[GridCollection]             [SecondaryCollection]
{ID = 0, Name = "Test A"}    {ID = 0, GridCollectionID = 0, Name = "Test A Linked"}
{ID = 1, Name = "Test B"}    

所以在这种情况下,GridCollection 项目 0 将在网格中突出显示。但是,如果我向 SecondaryCollection 添加另一个项目,则该项目将在网格中突出显示。

现在我可以强制更新网格的 ItemsSource,但这似乎很麻烦。有人对如何解决这个问题有任何想法吗?

【问题讨论】:

    标签: silverlight-4.0 datagrid


    【解决方案1】:

    使用Prism's EventAggregator 很容易实现:

    1. 确保 GridCollection 中的项目实现 INotifyPropertyChanged
    2. 向 GridCollection 中的项目类添加布尔 IsHighlight 属性
    3. 将项目添加到 SecondaryCollection 时,使用事件聚合器触发事件​​,使用 GridCollectionID 作为负载。
    4. 在 GridCollection 上订阅此事件并将 IsHighlight 设置为 true。
    5. 在 DataGrid 上,将条件格式设置为在 IsHighlight 为 true 时启用。

    这种方法是解耦且强大的,它让您可以根据需要制作高光并随时更改,甚至使用动画。

    【讨论】: