0
我正在C#WPF項目中使用Xceed DataGrid控件。我需要知道用戶何時更改網格上的過濾器,以便我可以更新我的ViewModel。當篩選器在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的弱事件。