【问题标题】:Know when row color changed + WPF + DataGrid知道行颜色何时更改 + WPF + DataGrid
【发布时间】: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 的任何内容并在该阶段对其采取行动?

标签: wpf datagrid


【解决方案1】:

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

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

【讨论】:

  • @AlekCarlsen 你得到了什么? DataGridRow 或 TextBox... 发布您尝试过的内容并不重要
  • 好吧,我可以让它在 itemssource 改变时触发,但是当我使用 ..DependencyPropertyDescriptor.FromProperty(Control.BackgroundProperty.. 当背景改变时它不会触发
  • @AlekCarlsen 显示有效的代码和无效的代码
猜你喜欢
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2013-03-16
  • 2016-06-04
  • 2015-08-25
  • 1970-01-01
相关资源
最近更新 更多