2012-01-29 88 views
0

我有一個Datagrid,它使用DataTable中的值填充。在我的程序中,我有四個按鈕:轉到第一個,最後一個,下一個和上一個,因爲名稱表示我必須根據使用這些按鈕所做的選擇來選擇行。一切似乎都很好,如果我使用下面的代碼來獲取行(例如第一行)。按鈕上的Datagrid行選擇單擊WPF

DataGridRow row =(DataGridRow)userControl.m_DataGrid.ItemContainerGenerator.ContainerFromIndex(0); 
row.IsSelected = true; 

但是,當存在比Datagrid的高度更多的行時(滾動條進入圖片時),代碼會拋出空值。

請幫我解決這個問題。我認爲這是因爲觀點問題。

回答

0

由於虛擬化的原因,容器只能在對象處於視圖中時才創建,因此您可以先使用respective method將項目滾動到視圖中,然後等待創建容器並將其選中。

由於這相當混亂,我建議使用DataGridRow(將其設置爲ItemContainerStyle)的樣式將IsSelected綁定到物品上。然後,您可以將該屬性設置爲true,並根據需要將該項目滾動到視圖中。

+0

我試過第一種方法(ScrollIntoView),所以我可以移動到第一個和最後一個位置,但行的選擇仍然不可能,因爲它給出了空值。只有第一排其行爲良好。 ** CustomerGrid.ScrollIntoView(CustomerGrid.Items [0]); DataGridRow row =(DataGridRow)CustomerGrid.ItemContainerGenerator.ContainerFromIndex(0); row.IsSelect = true; row.Focus(); ** – Kris 2012-01-29 19:12:49

+0

@Kris:我說你需要**等待容器被創建**,你不能在同一個方法中做到這一點,網格甚至不會在那一點滾動這是由UI線程在空閒時完成的。我不會試圖做到這一點,這是一個皇家的痛苦。 – 2012-01-29 19:17:10