我有我的GUI和線程的問題。 GUI包含DataGrid。每X次該程序做一些查詢並獲取我想要填充到DataGrid中的項目列表。Wpf應用程序和線程
到目前爲止好:
private void loadTaskList() //Call every X time
{
List<myObject> myList = myquery();
this.Dispatcher.Invoke((Action)(() =>
{
TaskListTable.Items.Clear(); //Clear the DataGrid
foreach (myObject O in myList) //Add the items from the new query.
{
TaskListTable.Items.Add(O);
}
}));
FindSelectionObject(); // <-- see next explanation.
}
當DataGrid中的對象之一的用戶點擊,線的顏色變化(正常工作),但是當程序重新加載表,該畫線消失(我打算清除並添加新的對象)。
來對付它,我創建了功能FindSelectionObject():
private void FindSelectionObject()
{
this.Dispatcher.Invoke((Action)(() =>
{
this.SelectedIndex = TaskListTable.Items.IndexOf((myObject)lastSelectionObject); //find index of the new object that equels to the last selection object.
var row = TaskListTable.ItemContainerGenerator.ContainerFromIndex(SelectedIndex) as DataGridRow; //get the row with the index
row.Background = Brushes.LightGoldenrodYellow; //repaint
}));
}
問題:一切正常,但有時當程序重新加載,每秒線閃爍,然後強調了回來,有時它根本不畫(直到下一次重新加載)。
我不明白爲什麼會這樣。我想可能FindSelectionObject()
在loadTaskList()
結束之前開始運行,調用all並將新對象添加到數據網格中。 但如果是這樣 - 爲什麼?我該如何解決它?
在底線,我想,經過每一個重載線重新漆立即..
感謝您的諮詢!
謝謝@ odyss-jii。你的答案的第二部分是我以爲發生了什麼,我試過你的代碼,但結果是它重新加載後從未突出行。我明白,我的解決方案是真的凌亂,但我沒有其他的想法,任何提示? – Yaron
嗯,你可能想嘗試'LoadingRow'事件。我已經用關於這方面的一些信息更新了答案。我希望這能更好地工作。 –
It Works!我註冊到事件'LoadingRow'並運行'FindSelectionObject'。現在我甚至可以從'loadTaskList'中刪除'FindSelectionObject'。謝謝@ odyss-jii! – Yaron