2011-11-16 140 views
1

當我將DataGrid上的.ItemSource()屬性設置爲Collection時,調用返回的速度很快,但實際綁定發生在後面。因爲我想顯示一個等待遊標,所以我需要檢測實際綁定何時完成。這有什麼事嗎?如何知道綁定何時完成?

回答

1

基於ItemsControl的任何事情都使用ItemContainerGenerator在後臺生成其項目。您可以訪問DataGrid的ItemContainerGenerator屬性並掛接StatusChanged事件以確定何時完成。如果您使用虛擬化並滾動,則會再次觸發,因此如果需要,您需要處理這種情況。

+0

謝謝,這似乎工作。由於某種原因,當我設置ItemsSource(沒有任何滾動)時會多次觸發,在使用虛擬化時是否正常? – Muis

+0

當你設置它時,你是否可以多次提升屬性更改事件或集合更改事件?就像也許你正在設置ItemsSource屬性,然後添加項目?無論是或者它可能是關於DataGrid的工作方式,我還沒有用過它 –

+0

不,它是一個永不改變的只讀集合。它有一個.Status屬性,從Generating變成Generated,所以它合乎邏輯,它觸發兩次,但我看到它發射6次(狀態:2,1,2,1,2,1),我會看看是否堆棧跟蹤可以揭示這一點。 – Muis

0

我等待我的DataGridLoaded事件,火災,和我做了BeginInvoke,像這樣:

可用
private void SubjectsList_Loaded(object sender, RoutedEventArgs e) 
{ 
    Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() => ColorMyRows())); 
} 

更多細節在我的答案在這裏:https://stackoverflow.com/a/44464630/2101117