知道什么时候行颜色改变了+ WPF + DataGrid

时间:2013-10-10 07:39:23

标签: wpf datagrid

快速提问。

我有一个DataGrid,可以通过SQL-Dependency自动更新。 我设置了一个触发器,可以根据几个值(红色或绿色)将BackgroundProperty更改为一种颜色。 我真的希望在触发器中使用事件处理器。

我的问题是:当触发器改变背景时,哪个事件处理程序会触发?我尝试过DependencyPropertyDescriptor - 它在检查itemssource时发生了变化,但是没有DataGridRow.BackgroundProperty或Control.BackgroundProperty(只是不触发) 与我的依赖属性像

var desc = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(Control)); 
desc.AddValueChanged(MyDataGrid,MyEventHandler);

我的活动是这样的:

            DataGrid mygrid = sender as DataGrid;
            var itemsSource = mygrid.ItemsSource as IEnumerable;
            if (null != itemsSource)
            {           
               foreach (var item in itemsSource)
                {
                    var row = mygrid.ItemContainerGenerator.ContainerFromItem(item) as DataGridRow;
                    if (null != row)
                    {
                        if (Equals(Brushes.Red, row.Background))
                        {
                        //Do whatever
                        }
                    }
                }
            }

但是行总是为空 - 这是为什么? 编辑:它返回null,因为它是虚拟化的,不是“在视图中”。

我希望能够创建一个事件处理程序来与我的数据触发器中的事件处理器一起使用

提前谢谢。

1 个答案:

答案 0 :(得分:1)

@Sheridan建议您已经知道何时应该更改背景颜色,以便只使用该数据并完成您想要的额外工作, 但是如果你只是必须创建一个回调更改背景,那么你可以使用DependencyPropertyDescriptor添加更改的处理程序:

var desc = DependencyPropertyDescriptor.FromProperty(Control.BackGroundProperty,typeof(Control)); desc.AddValueChanged(此,yourEventHandler);