2016-03-03 37 views

回答

0

在網格上有兩種過濾方式: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的弱事件。

相關問題