知道行颜色何时更改+;WPF&x2B;数据网格

知道行颜色何时更改+;WPF&x2B;数据网格,wpf,datagrid,Wpf,Datagrid,快速提问 我有一个DataGrid,它通过SQL依赖项自动更新。 我设置了一个触发器,将BackgroundProperty更改为基于几个值(红色或绿色)的颜色。 我真的希望在触发器上使用事件设置器 我的问题是:当触发器更改背景时,触发哪个eventhandler?我尝试了DependencyPropertyDescriptor-当检查itemssource已更改时,它可以工作,但不检查DataGridRow.BackgroundProperty或Control.BackgroundProper

快速提问

我有一个DataGrid,它通过SQL依赖项自动更新。 我设置了一个触发器,将BackgroundProperty更改为基于几个值(红色或绿色)的颜色。 我真的希望在触发器上使用事件设置器

我的问题是:当触发器更改背景时,触发哪个eventhandler?我尝试了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,因为它是虚拟化的,并且不在“视图”中

我希望能够创建一个eventhandler,与datatrigger中的eventsetter一起使用


提前谢谢。

Sheridan的建议是,你已经知道什么时候应该更改背景颜色,所以只需使用这些数据,并完成你想要的额外工作,
但如果您只需创建一个对后台更改的回调,则可以使用添加更改的处理程序:

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

@Sheridan的建议是,你已经知道什么时候应该更改背景颜色,所以只需使用这些数据,然后做你想要的额外工作,
但如果您只需创建一个对后台更改的回调,则可以使用添加更改的处理程序:

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

您的
触发器肯定会根据某些数据值更改
背景的颜色,不是吗?为什么不监视相关的数据属性呢?好吧,这里有一件事-触发器值是动态的(使用(valueconverters)),基于另一个SQLTable,但肯定在某个阶段,它取决于传入的新数据。。。您刚才说它基于另一个SQL表。你不能迭代输入的数据来找到触发
触发器的东西,并在该阶段对其进行操作吗?当然你的
触发器会根据某些数据值改变
背景的颜色,不是吗?为什么不监视相关的数据属性呢?好吧,这里有一件事-触发器值是动态的(使用(valueconverters)),基于另一个SQLTable,但肯定在某个阶段,它取决于传入的新数据。。。您刚才说它基于另一个SQL表。你不能迭代输入的数据来找到触发
触发器的任何东西,并在该阶段对其采取行动吗?@AlekCarlsen你得到了什么?DataGridRow或TextBox是否。。。发布您尝试过的内容,我可以让它在itemssource更改时启动,但在我使用..DependencyPropertyDescriptor.FromProperty时不会(Control.BackgroundProperty..当背景为changed@AlekCarlsen显示执行和不执行的代码work@AlekCarlsen你得到了什么?不管是DataGridRow还是TextBox…发布你尝试过的内容,我都可以让它在itemssource上启动,但当我使用..DependencyPropertyDescriptor.FromProperty时就不会了y(Control.BackgroundProperty..当背景为changed@AlekCarlsen显示有效代码和无效代码