2011-04-21 5 views
0

ListBox (SelectedMode = Multiple) 컨트롤에서 ListBoxItems의 하위 집합을 프로그래밍 방식으로 선택해야합니다.Silverlight 4 : ListBoxItem 선택 문제

<Grid x:Name="LayoutRoot" Background="White"> 
    <ListBox Height="238" HorizontalAlignment="Left" Margin="26,41,0,0" Name="listBox1" VerticalAlignment="Top" Width="349" SelectionMode="Multiple" /> 
    <Button Content="Fill" Height="23" HorizontalAlignment="Left" Margin="26,12,0,0" Name="buttonFill" VerticalAlignment="Top" Width="75" Click="buttonFill_Click" /> 
    <Button Content="Randomly Select" Height="23" HorizontalAlignment="Left" Margin="116,12,0,0" Name="buttonSelectRandom" VerticalAlignment="Top" Width="104" Click="buttonSelectRandoml_Click" /> 
</Grid> 


    private void buttonFill_Click(object sender, RoutedEventArgs e) 
    { 
     for (int i = 0; i < 100; i++) 
      listBox1.Items.Add(new ListBoxItem { Content = i.ToString()}); 
    } 

    private void buttonSelectRandom_Click(object sender, RoutedEventArgs e) 
    { 
     var rand = new Random(); 

     foreach (ListBoxItem item in listBox1.Items) 
      if (rand.Next(2)==1) item.IsSelected = true; 
    } 

그러나 내가 코드 (이하 "기입"버튼을 누른 다음 "무작위 선택"버튼을 클릭)를 실행할 때 선택으로 만 현재 표시되는 항목 을 보여 것 같다. ListBox 스크롤 코드에서 "IsSelected"상태가 "true"로 설정되었음을 표시하더라도으로 표시된 다른 ListBoxItems는 표시되지 않습니다.

흥미롭게도 ListBox (또는 부분 방법)의 끝으로 수동으로 스크롤 한 다음 "임의 선택"단추를 클릭하면 ListBox에서 선택한 모든 항목을 올바르게 그립니다. 많은 해결 방법을 시도했지만 작동하지 않는 것 같습니다. 이거 버그 야? 해결 방법은 무엇입니까?

도움 주셔서 감사합니다.

를 jink

답변

3

이 때문에 목록 상자의 사용 VirtualizingStackPanel 수 있습니다. 일반 StackPanel로 테스트 할 수 있습니까?

<ListBox> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
    </ListBox> 

편집 :

또 다른 해결책은 대신 item.IsSelected = true를하고, 당신은

 foreach (int item in listBox1.Items) 
     { 
      if (rand.Next(2) == 1) 
      { 
       this.listBox1.SelectedItems.Add(item); 
      } 
     } 

나는 그것을 테스트하고 작동을한다. :)

+0

+1 나를 위해 일했습니다. 또한 선택 항목을 설정하기 전에 목록을 스크롤하여 항목이 올바르게 표시되는 이유를 설명합니다. – Kimberly

+0

감사합니다. 대답을 수락 할 수 있습니까? :) –

+0

@Xin, 나는 내 질문이 아니기 때문에 대답을 받아 들일 수 없다. :) 당신이 그 코드를 직접 시도했는지 여부는 당신의 대답에서 분명하지 않기 때문에 나는 부딪쳤다. 그러나 그 특정한 문제를 해결하기 위해 노력한다. 어쨌든, 메모리 집약적 인 항목으로 인해 OP에 가상화 항목 패널이 실제로 필요한 경우, 며칠 동안 질문을 공개하고 많은 사람들에게 다른 가능한 해결 방법을 적용 할 기회를주기를 바랍니다. – Kimberly