检测过滤器在WPF的Xceed DataGrid控件中何时更改

时间:2016-03-03 16:55:28

标签: c# wpf xceed-datagrid

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

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

1 个答案:

答案 0 :(得分:0)

有两种方法可以过滤网格:AutoFilterControl和FilterRow。

a)对于AutoFilterControl,您希望订阅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的内容时,FilterCriterion属性都会在相应的ItemProperty上更新,这将触发该ItemProperty的弱事件。