문자열 배열에있는 문자열을 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에 문자열을 추가하면 작동하지 않는 이유를 알 수 없습니다.
반복을 중지 하시겠습니까? 아니면'_currenLogContent'의 첫 번째 항목 만 보았습니까? 디버거에서 밟았습니까? –
@Avner : 예 그것을 통해 밟았습니다. 일단 OnLogContentChanged가 호출되면 foreach 루프를 통해 한 번만 반복합니다. tmpString []에 40 개의 항목이 있어도. – ck84vi
잠깐,'tmpString []'은 뭐니? 그것은 당신이 보여주는 코드가 아닙니다. –