2012-10-27 2 views
2

Windows RT App에서 목록 상자의 항목을 지우려고합니다. 항목을 추가하려면, 내가 사용목록 상자에서 항목을 제거하면 치명적 오류가 발생합니까?

List<string> list1; 
... 
foreach(string s in list1.Items) 
{ 
    listBox1.Items.Add(s); 
} 

이 항목을 지우려면, 내가 사용 : 내가 사용하려고하면

Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) 

:

listBox1.Items.Clear(); 

그러나, 문제는이 예외가 발생합니다 :

 int at = 0; 
     while (at < listBox1.Items.Count) 
     { 
      listBox1.Items.RemoveAt(at); 
      at += 1; 
     } 

나는 R 메서드를 emoveAt. 항목을 1에서 현재 0에있는 항목이 될 것이다 -

+0

죄송합니다 (제대로에서 INotifyPropertyChanged 인터페이스를 구현 한 경우에는 목록이 업데이트 얻을 것이다)하지만'목록 은''Items'에서 모두를위한 정의가 포함되어 있습니까? –

답변

1

는 두 번째를 들어, 당신은 정말 당신이 0에있는 항목을 삭제하면

'에서'증가하지 않습니다.

그렇게

while (listBox1.Items.Count != 0) 
{ 
listBox1.Items.RemoveAt(0); 

} 

작동합니다.

첫 번째 예외가 발생하는 이유가 확실하지 않습니다. 목록 상자를 어딘가에 시작 했습니까?

+0

내가 왜 그랬는지 모르겠습니다. add 및 remove 메소드는 모두 InitializeComponent 다음에 호출되므로 초기화되었다고 가정합니다. – msbg

+1

listBox1.SelectionChanged에서 사용했기 때문에 문제가 해결되었습니다. – msbg

3

이 문제에 대한 해결책을 찾았습니다. SelectionChanged 이벤트에 의해 시작된 메서드에서 항목을 제거하려고했습니다. 이 변경 :

await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, listBox1.Items.Clear); 

그리고 잘 작동합니다.

0

목록이 DataBinding을 사용하여 일부 데이터에 바인딩 된 경우 ListItems가 아닌 데이터 모델에서 작업하십시오.

관련 문제