当筛选器在Xceed DataGrid控件中更改为WPF时检测到

当筛选器在Xceed DataGrid控件中更改为WPF时检测到

问题描述:

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

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

在网格上有两种过滤方式:AutoFilterControl和FilterRow。

一)为AutoFilterControl,你想订阅的DataGridCollectionView

<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,发现AutoFilterValuesChanged事件的地方在你的代码,你将有访问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的弱事件。