2009-08-26 5 views
1

Silverlight를 사용하는 이슈 추적 시스템을 구축하고 있습니다. DataGrids를 사용하여 이슈 목록을 표시하고 선택한 인덱스를 -1로 설정하여 행이 선택되지 않았는지 확인한 다음 선택 변경 이벤트를 사용하여 선택한 특정 문제에 대한 이슈 세부 정보 창을 표시합니다.Silverlight Datagrid SelectionChanged 바인딩을 사용하여 데이터 새로 고침

DataGrid를 ItemsSource에 다시 바인딩하여 새로 고치려고하면 SelectionChanged 이벤트를 사용하지 않도록 설정하고 DataGrid를 ItemsSource에 다시 바인딩하고 SelectedIndex를 -1로 설정 한 다음 SelectionChanged 이벤트를 다시 사용하도록 설정합니다. 그러나 (DataGrid_Loaded 이벤트가 끝날 때까지) SelectionChanged 이벤트의 다시 활성화를 얼마 동안 끝내더라도 SelectionChanged 이벤트가 발생하고 문제 세부 정보 창이 팝업됩니다.

SelectedIndex가 변경되지 않는 DataGrid의 데이터를 새로 고치는 더 좋은 방법이 있습니까? 그렇지 않은 경우 프로그래밍 방식의 인덱스 변경으로 인해 발생하는 이벤트와 사람과의 상호 작용이 아닌 이벤트를 알려주는 방법이 있습니까?

(또한 토론까지이 작업에 가장 적합한 제어인가? 나는 등 사용자의 상태에 의해 요구 등의 문제 제목 같은 행 당 여러 필드, 할당 된 사용자를 표시합니다) 미리 감사드립니다.

답변

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(); 
} 
관련 문제