2012-02-06 4 views
1

나는 현재 설정 목록 상자를 가지고 :옵니다 ScrollIntoView 신뢰할 수없는 selectedItem가

DetailsList.DataContext = details; 

다음했던 버튼 :

details.Add(System.DateTime.Now.ToString("HH:mm:ss ") + someString); 
DetailsList.UpdateLayout(); 
var lastItem = DetailsList.Items[DetailsList.Items.Count - 1]; 
DetailsList.SelectedItem = lastItem; 
DetailsList.ScrollIntoView(lastItem); 

목록의 마지막 항목을 선택하고로 이동하지만, 그것은 단지 그것을 시간의 약 75 %를 수행해야한다고. 대신, 종종 두 번째 마지막을 선택하고 그 대신에 스크롤 할 것입니다.

스크롤 및 선택 항목을 LayoutUpdated 이벤트 핸들러로 옮겨 보았습니다. 변경하지 않았습니다.

두 개의 별도 버튼을 추가해 보았습니다. 하나는 추가하고 하나는 선택하고 스크롤합니다. 한 번에 하나의 항목을 추가 한 다음 스크롤하면 약간 더 안정적으로 보입니다. 이는 90 %의 시간 동안 작동합니다. 스크롤하기 전에 6 가지 항목을 추가하면 거의 작동하지 않습니다. 일반적으로 새 항목 중 하나를 선택하지만 마지막 항목은 선택하지 않습니다.

내가 잘못했거나 System.Windows.Controls.ListBox에 버그가 있습니까?

+1

'someString'은 무엇인가요? 항상 같은 가치입니까? 초당 1 번 이상 버튼을 누르면 평등 문제가 발생할 수 있습니다. –

+0

가치가 중요하다고 생각하지 않았습니다. 예, 버튼 테스트의 경우 일정했습니다. 동일한 내용의 요소를 구별 할 수있는 방법이 없다는 뜻입니까? "실제"데이터가 동일 할 수도 있고 1 초에 여러 번 추가되는 경우도 있습니다. –

+0

값이 중요 할 수 있습니다. ListBox에서 SelectedItem을 설정하면 선택할 항목을 찾기 위해 해당 항목에 대해 Equals 메서드를 호출합니다. 같은 텍스트를 가진 두 개의 문자열이 있다면 그 중 어느 것이 의미하는지 파악할 수 없으며 관찰 된 동작을 얻습니다. –

답변

6

동일한 문자열 값을 가진 여러 항목이 목록에 추가되는 것이 문제입니다. ListViewSelectedItem 속성을 설정하면 Equals 메서드를 호출하여 올바른 항목을 찾습니다. Equals이 true를 반환하는 첫 번째 항목을 선택하므로 관찰 된 동작을 얻게됩니다.

고유 한 문자열 (예 : 밀리 초 추가)을 추가하거나 다른 클래스에 래핑하여 고유하게 식별 할 수 있어야합니다.

+0

더 많은 upvotes이 있어야합니다. 바보 같은 테스트 데이터 ...... – JoshHetland

관련 문제