当筛选器在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的弱事件。