1

快速提问。

我有一个通过 SQL 依赖项自动更新的 DataGrid。并且我设置了一个触发器来将 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 因为它是虚拟化的并且不是“在视图中”。

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

先感谢您。

4

1 回答 1

1

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

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

于 2013-10-10T08:00:10.103 回答