2014-09-08 1 views
0

문자열 배열에있는 문자열을 ObservableCollection에 추가하려고합니다.ObservableCollection에 문자열 배열 추가 <string>이 작동하지 않습니다.

내가 그것을 할 방법은 다음과 같습니다

내가 컬렉션을 인스턴스화 목록에 배열에서 문자열을 추가 내 메서드를 호출하는 이벤트 핸들러를 추가 내 생성자에서

다음에

public CLoggerViewModel() 
    { 
     this._currenLogContent = new ObservableCollection<string>(); 
     this._memoryAppender.LogContentChanged += new LoggingEventHandler(OnLogContentChanged); 
    } 

이벤트 핸들러 내가 문자열 배열을 반복하고 컬렉션에 각 문자열을 추가 할 : 내 인수에

public void OnLogContentChanged(object sender, LoggingEventArgs e) 
{ 
    string[] tmpString = { "A", "B", "C", "D" }; 

    foreach (string s in tmpString) 
    { 
     _currenLogContent.Add(s); 
    } 
} 

e.LogEntries 

내 문자열 배열을 보유하고있어 항상 기대하는 모든 문자열을 가지고 있습니다. 단순성/테스트를 위해 여기에서 확인할 수있는 방식으로 변경하라는 요청을 받았기 때문에 필자가 인수에서 얻은 배열을 사용하지 않고 A, B, C, D로 인스턴스화하지 않습니다.

내 문제는 항상 배열의 첫 번째 문자열이 ObservableCollection에 추가된다는 것입니다. 첫 번째 문자열이 추가되면 foreach 반복이 종료 된 것으로 보입니다.

편집 : 내가가를 반복 내 ObservableCollection에 바인딩하여 목록 상자를 제거하면

<ListBox Name="listViewLog" ItemsSource="{Binding LoggerViewModel.CurrentLogContent,UpdateSourceTrigger=PropertyChanged}" Margin="0,0,-248,-377" Grid.ColumnSpan="2" RenderTransformOrigin="0.586,0.51" Height="367" VerticalAlignment="Bottom" /> 

: 내 WPF XAML 파일에서

내 ObservableCollection에가 바인딩 다음 목록 상자가있는 경우 foreachloop. 목록 상자 또는 목록 상자에서 내 컬렉션으로의 바인딩 때문에 반복이 중지됩니다. 이미 모든 UpdateSourceTrigger 옵션 (기본값, 명시 적, LostFocus, PropertyChanged)을 사용하려고했습니다. 그러나 모든 경우에 첫 번째 라운드 이후에 반복이 중지됩니다.

Observablecollection에 문자열을 추가하는 것을 막기 위해 ListBox 속성에서 설정해야 할 것이 있습니까?

편집 :

제가 별도의 클래스에서 컬렉션에 추가하고 목록에 개체를 추가 할 문자열을 래핑하는 것입니다 작동 내가 발견하는 유일한 솔루션입니다. 이 경우 목록에 객체를 추가하면 내 foreach 루프가 손상되지 않습니다.

public void OnLogContentChanged(object sender, LoggingEventArgs e) 
    { 
     string[] tmpString = { "A", "B", "C", "D" }; 

     foreach (string s in tmpString) 
     { 
      this.LogEntries.Add(new CLogEntry(s)); 
     } 

    } 

CLogEntry는 단일 문자열을 제공하는 래퍼입니다.

이 해결 방법으로 작동하지만 여전히 "직접"Observablecollection에 문자열을 추가하면 작동하지 않는 이유를 알 수 없습니다.

+0

반복을 중지 하시겠습니까? 아니면'_currenLogContent'의 첫 번째 항목 만 보았습니까? 디버거에서 밟았습니까? –

+0

@Avner : 예 그것을 통해 밟았습니다. 일단 OnLogContentChanged가 호출되면 foreach 루프를 통해 한 번만 반복합니다. tmpString []에 40 개의 항목이 있어도. – ck84vi

+2

잠깐,'tmpString []'은 뭐니? 그것은 당신이 보여주는 코드가 아닙니다. –

답변

0

ObservableCollection에 다른 데이터 바인딩을 설정 했습니까? 또는 ListBox에 데이터 바인딩을 제어 할 컨트롤을 설정 했습니까? 귀하의 코드가 옳은 것 같아 문제를 재현 할 수 없다면 데이터가 ObservableCollection에 의해 트리거 된 "논리"로 묶여 있다고 생각합니다.이 오류로 인해 반복이 완료되지 않습니다.

+0

나는 내 컬렉션에 단 하나의 바인딩을 가지고 있습니다. 그리고 나는 또한 바인딩을 제어하는 ​​컨트롤을 가지고 있지 않습니다. 내 게시물에 내 코멘트를 참조하십시오. 내가 문자열에 대한 래퍼 클래스를 화나게하는 방식으로 바 꾸었습니다. 지금은 반복 할 수 있습니다. – ck84vi

관련 문제