2013-04-25 4 views
1

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); 
} 

이 좋은 해결책이 아니다. 이 문제를 피하는 더 좋은 방법이 있습니까?

답변

1

당신은 Catel의 FastObservableCollection 사용을 고려할 수 있습니다 즉시 당신이 사용하는 나가로

using (fastCollection.SuspendChangeNotifications()) 
{ 
    // TODO: Add and remove all your items here 
} 

을, 당신이 사용할 수는 스레딩 문제를 해결하기 위해서는 통지

변경의 전달합니다 DispatcherHelper.

+0

빠른 답장을위한 Thx. 이 솔루션은 나에게 새로운 문제를 안겨 주었다. 나는이 문제의 끝에서 새로운 문제를 설명했다. 시간 내 주셔서 감사합니다. – RayOldProf

+0

업데이트 할 때 목록의 크기는 얼마나됩니까? ContextIdle 이외의 다른 값을 시도 했습니까? –

관련 문제