检测 WPF 的 Xceed 数据网格控件中的筛选器何时发生更改

本文关键字:筛选 何时发 控件 Xceed WPF 数据 数据网 网格 检测 | 更新日期: 2023-09-27 18:37:11

我目前正在我的C# WPF项目中使用Xceed DataGrid控件。我需要知道用户何时更改网格上的筛选器,以便我可以更新我的 ViewModel。

有没有办法检测网格上的过滤器何时被更改?

检测 WPF 的 Xceed 数据网格控件中的筛选器何时发生更改

有两种方法可以在网格上进行筛选:AutoFilterControl 和 FilterRow。

a) 对于自动筛选控件,您希望订阅在 DataGridCollectionView 上找到的 AutoFilterValuesChanged 事件

<xcdg:DataGridCollectionViewSource AutoFilterValuesChanged="DataGrid_AutoFilterValuesChanged" ... />
private void DataGrid_AutoFilterValuesChanged(object sender, AutoFilterValuesChangedEventArgs e)
{
    Dispatcher.BeginInvoke(new Action(UpdateViewModel), DispatcherPriority.Normal);
}
private void UpdateViewModel()
{
    // your code here
}

b) 对于 FilterRow,在代码中的某个位置,您必须访问 DataGridCollectionView 并执行以下操作:

var dgCollectionView = dataGrid.ItemsSource as DataGridCollectionView;
if( m_dgCollectionView != null )
{
    foreach( var itemProperty in m_dgCollectionView.ItemProperties )
    {
        PropertyChangedEventManager.AddListener( itemProperty, this, "FilterCriterion" );
    }
}
public bool ReceiveWeakEvent( Type managerType, object sender, EventArgs e )
{
    if( managerType == typeof( PropertyChangedEventManager ) )
    {
        var itemProperty = sender as DataGridItemProperty;
        // your code here
    }
    return true;
}

具有侦听器的类(在本例中为"this")必须实现 IWeakEventListener。

每次用户更改 FilterCell 的内容时,都会在相应的 ItemProperty 上更新 FilterCriterion 属性,这将触发该 ItemProperty 的弱事件。