2011-07-26 3 views
1

Silverlight 프로젝트에 ListBox가 있습니다. ListBox에서 ListItem을 제거하고 추가 할 때 다음 오류가 발생합니다.Silverlight에서 ListItem 제거

Operation not supported on read-only collection. 

코드 :

public void btnUp_Click(object sender, RoutedEventArgs e) 
    { 
     if (lbChoices.SelectedItem != null) 
     { 
      ListBoxItem selectedItem = new ListBoxItem();   
      selectedItem.Content = lbChoices.SelectedItem; 
      selectedItem.IsSelected = true; 
      int selectedIndex = lbChoices.SelectedIndex; 
      if (lbChoices.Items.Count > 1) 
      {    
       if (selectedIndex > 0) 
       { 
        lbChoices.Items.Remove(lbChoices.SelectedItem);  
        lbChoices.Items.Insert(selectedIndex - 1, selectedItem);     
        } 
      } 
     } 
    } 

답변

0
은 다음과 같이 코드를 변경

:

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    if (lbChoices.SelectedItem != null) 
    { 
     ListBoxItem selectedItem = (ListBoxItem)lbChoices.SelectedItem; 
     int selectedIndex = lbChoices.SelectedIndex; 
     if (lbChoices.Items.Count > 1) 
     { 
      if (selectedIndex > 0) 
      { 
       lbChoices.Items.Remove(lbChoices.SelectedItem); 
       lbChoices.Items.Insert(selectedIndex - 1, selectedItem); 
      } 
     } 
    } 
} 

당신의 목록 상자에서 선택한 항목을 이동하는 것으로 보인다.

+0

먼저 감사합니다. 흥미롭게도, 위쪽 및 아래쪽 버튼으로 항목의 위치를 ​​변경하고 싶습니다. – Selo

1

당신이 ItemsSource으로 ItemsControl에를 사용하고, 당신은 Items 컬렉션을 사용하여 요소를 추가/제거 할 수 없습니다. 대신 기본 모음을 수정해야합니다.

"문제는 내가 ListBox를 ObservableCollection에 바인딩했는데 일단 바인딩되면 Items 컬렉션은 읽기 전용이됩니다."

1

ItemsSource를 바인딩하여 항목을 추가하셨습니까? 그렇다면 컬렉션 컬렉션에서 항목을 삭제하십시오.

1

ListBox이 바인딩 된 출처의 항목을 ListBox 자체에서 제거해야합니다. 소스에서 제거하는 즉시 ListBox이 자동으로 새로 고침되어 항목을 표시하지 않습니다.

관련 문제