2013-10-08 2 views
0

ObservableCollection이있는 ViewModel이 있습니다. ObservableCollection 항목을 업데이트하는 데 긴 함수가 있지만 함수가 너무 길어서 싶지 않습니다. 그것을 ViewModel 안에 넣는다.뷰어 모델의 관찰 가능한 컬렉션을 다른 도우미 클래스에서 업데이트합니다.

ObservableCollection에서 직접 업데이트를 수행하여 프로세스가 실행되는 동안 내 뷰에서 변경 사항을 볼 수 있습니다.

내가 업데이트 기능을 퍼 팅 내 정적 ObservableCollection에
  • 을 업데이트 객체
  • 를 함수에 현재 항목을 보내고 돌아 심판
  • 하여 ObservableCollection에를 보내는 followig

    • 생각 내 ViewModel하지만 내 ViewModel 크고 지저분한 것입니다

    이 컬렉션에서 작동 할 여러 기능이 많이있을 것입니다. 이러한 경우 최고의 프로그래밍 연습은 무엇입니까?

  • 답변

    1

    데이터를 처리하고 처리 된 데이터를보기로 전달하는 경우 아래 옵션이 하나의 가능한 솔루션이어야한다고 생각합니다.

    보기는 동시에 변경 사항을 통보하는 동안 데이터를 처리합니다.

    public class MyViewModel : INotifyPropertyChanged 
    { 
        private ObservableCollection<string> _unprocessedData = new ObservableCollection<string>(); 
        private ObservableCollection<string> _processedData = new ObservableCollection<string>(); 
        private static object _lock = new object(); 
        public event PropertyChangedEventHandler PropertyChanged; 
    
        public ObservableCollection<string> Collection { get { return _processedData; } }//Bind the view to this property 
    
        public MyViewModel() 
        { 
         //Populate the data in _unprocessedData 
         BindingOperations.EnableCollectionSynchronization(_processedData, _lock); //this will ensure the data between the View and VM is not corrupted 
         ProcessData(); 
        } 
    
        private async void ProcessData() 
        { 
         foreach (var item in _unprocessedData) 
         { 
          string result = await Task.Run(() => DoSomething(item)); 
          _processedData.Add(result); 
          //NotifyPropertyChanged Collection 
         } 
        } 
    
        private string DoSomething(string item) 
        { 
         Thread.Sleep(1000); 
         return item; 
        } 
    } 
    

    DoSomething 메서드는 ViewModel 외부의 다른 클래스에서 정의 할 수 있습니다.

    이 정보가 도움이되기를 바랍니다.

    관련 문제