【发布时间】:2013-10-17 20:39:27
【问题描述】:
快速提问。
我有一个通过 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
}
}
}
}
但 row 始终为 null - 这是为什么呢? 编辑:它返回 null 因为它是虚拟化的并且不是“在视图中”。
我希望能够创建一个事件处理程序来与我的数据触发器中的事件设置器一起使用
提前谢谢你。
【问题讨论】:
-
您的
Trigger肯定会根据某些数据值更改Background颜色,不是吗?为什么不直接监控相关的数据属性呢? -
好吧,事情是这样的——触发值是动态的(使用 (valueconverters)),基于另一个 sqltable
-
但肯定在某个阶段,这取决于传入的新数据……您刚才说它基于另一个 SQL 表。您能否不迭代传入数据以找到触发
Trigger的任何内容并在该阶段对其采取行动?