我目前在我的 C# WPF 项目中使用 Xceed DataGrid 控件。我需要知道用户何时更改网格上的过滤器,以便更新我的 ViewModel。
有没有办法检测网格上的过滤器何时更改?
我目前在我的 C# WPF 项目中使用 Xceed DataGrid 控件。我需要知道用户何时更改网格上的过滤器,以便更新我的 ViewModel。
有没有办法检测网格上的过滤器何时更改?
有 2 种过滤网格的方法: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 的内容时,都会在相应的 ItemProperty 上更新 FilterCriterion 属性,这将触发该 ItemProperty 的弱事件。