2009-08-26 55 views
1

我正在構建一個使用Silverlight的問題跟蹤系統。我使用DataGrid顯示問題列表,將選定索引設置爲-1,以便不顯示選定行,然後使用選擇更改事件爲特定選定問題彈出問題詳細信息窗口。Silverlight Datagrid使用SelectionChanged綁定刷新數據

當我嘗試通過重新綁定到它的ItemsSource來刷新DataGrid時,我禁用了SelectionChanged事件,將DataGrid重新綁定到它的ItemsSource,將SelectedIndex設置爲-1,然後再次啓用SelectionChanged事件。但是,無論我多久離開重新啓用SelectionChanged事件(即使在DataGrid_Loaded事件之後),都​​會觸發SelectionChanged事件並彈出問題詳細信息窗口。

是否有更好的方法來刷新DataGrid中的數據,這些數據不會導致SelectedIndex更改?如果不是,有沒有辦法說明哪些事件是由程序性索引變化引起的,而不是人爲交互引起的?

(也拿出來討論,這是這個職位的最佳控制?我需要顯示每行的多個領域,如問題標題,分配的用戶,按用戶,狀態等要求)

提前致謝。

回答

2

我在過去使用comctl32 ListView控件的選擇事件時遇到了類似的問題:編程選擇導致選擇更改事件被引發。

我對這個問題的解決方法是讓每個網格/列表計數器變量讓事件處理程序知道它是否應該關心選擇事件。代碼會像這樣:

int issueList_ProgrammaticEventCount_Selection = 0; 

void refreshIssueList() 
{ 
    ++issueList_ProgrammaticEventCount_Selection; 
    issueList.ItemsSource = ...; 
} 

void issueList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (issueList_ProgrammaticEventCount_Selection > 0) 
    { 
     --issueList_ProgrammaticEventCount_Selection; 
     return; 
    } 

    showIssueDetails(); 
}