Catel을 사용하여 WPF 응용 프로그램을 구현합니다.Catel (MVVM 프레임 워크) ObservableCollection
나는 ObservableCollection
에서 연장되는 클래스가 있으며 항목이 삽입 될 때마다 UI가 업데이트되어야합니다.
CODE (단순화 된 버전는) :
public abstract class LogCollections : ObservableCollection<Log4NetLog> {
private readonly Object _locker;
protected LogCollections() {
_logChart = new LoggingLevelChart();
_locker = new object();
}
public object Locker {
get { return _locker; }
protected override void InsertItem(int index, Log4NetLog item) {
lock (_locker) {
base.InsertItem(index, item);
if (item == null) {
return;
}
Log4NetLog temp = item as Log4NetLog;
// Updating
if (temp != null) {
// Updating
}
} //UnLock
}
}
}
지금까지 나는 .NET 4.5에서만 사용할 수 있습니다 BindingOperations.EnableCollectionSynchronization을 사용했다. 불행히도 닷넷 4를 사용하여 코드를 컴파일해야합니다.
이 문제를 해결하는 Catel 프레임 워크에는 무엇이 있는지 알고 싶습니다.
추가 정보 :이 응용 프로그램 내가 컬렉션에 많은 항목을 추가하기 때문에 성능이 주요 문제에 대한
.
UPDATE : 를 사용
는 그러나 UI는 최대한 빨리 사용의 나가로 약 5-7 초 동안 정지 문제를 해결합니다. 내 생각 엔 내가 수동으로 OnCollectionChanged
을 재정의이이 Dispatcher
에 의해 발생한다는 것입니다 :
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) {
DispatcherHelper.CurrentDispatcher.BeginInvoke(new Action(() => base.OnCollectionChanged(e)),
DispatcherPriority.ContextIdle);
}
이 좋은 해결책이 아니다. 이 문제를 피하는 더 좋은 방법이 있습니까?
빠른 답장을위한 Thx. 이 솔루션은 나에게 새로운 문제를 안겨 주었다. 나는이 문제의 끝에서 새로운 문제를 설명했다. 시간 내 주셔서 감사합니다. – RayOldProf
업데이트 할 때 목록의 크기는 얼마나됩니까? ContextIdle 이외의 다른 값을 시도 했습니까? –