2016-08-27 3 views
0

У меня проблема. Ищите много, но не можете найти решение. Мне нужно, из другого потока, обновить ObservableCollection без зависания пользовательского интерфейса. Я использую NET4.0. Этот код не позволяет мне видеть сообщение «ProgressRing» и «Поиск». Спасибо!Обновление ObservableCollection из другого потока

private void Search() 
    { 

     ShowMessage = "Searching..."; // Message while the search is made. 

     IsBusy = true; // Show WPF Toolkit BusyIndicator 

     ShowProgressRing = true; // To show a ProgressRing in BusyIndicator 

     Task.Factory.StartNew(() => 
     { 

      Articles = new ObservableCollection<Article>(); 

      ///////////////////////////// 
      //// Simulate SQL query //// 
      /////////////////////////// 

      for (var i = 0; i < 1000; i++) 
      { 
       Articles.Add(new Article 
       { 
        Code = i.ToString(), 
        Name = "PRODUCT NAME", 
        Price = 1m 
       }); 
      } 

     }).ContinueWith(x => 
     { 

      IsBusy = false; // Hide 

     }, TaskScheduler.FromCurrentSynchronizationContext()); 

    } 

EDIT

private bool _showProgressRing; 

public bool ShowProgressRing 
{ 
    get { return _showProgressRing; } 
    set 
    { 
     _showProgressRing = value; 
     RaisePropertyChanged("ShowProgressRing"); 
    } 
} 

private bool _isBusy; 

public bool IsBusy 
{ 
    get { return _isBusy; } 
    set 
    { 
     _isBusy = value; 
     RaisePropertyChanged("IsBusy"); 
    } 
} 

private string _showMessage; 

public string ShowMessage 
{ 
    get { return _showMessage; } 
    set 
    { 
     _showMessage = value; 
     RaisePropertyChanged("ShowMessage"); 
    } 
} 

My VM наследуют от ViewModelBase (MVVM Light)

ответ

0

Я предполагаю, что ваш ShowMessage определяется таким образом:

 private string _ShowMessage ; 
    public string ShowMessage 
    { 
     get 
     { 
      return _ShowMessage; 
     } 
     set 
     { 
      this.Set<string>("ShowMessage ", ref this._ShowMessage , value); 
     } 
    } 

Same вещь с вашим имуществом IsBusy:

  private string _IsBusy ; 
    public bool IsBusy 
    { 
     get 
     { 
      return _IsBusy ; 
     } 
     set 
     { 
      this.Set<bool>("IsBusy ", ref this._IsBusy , value); 
     } 
    } 

и То же самое для

  private string _ShowProgressRing; 
    public bool ShowProgressRing 
    { 
     get 
     { 
      return _ShowProgressRing; 
     } 
     set 
     { 
      this.Set<bool>("ShowProgressRing", ref this._ShowProgressRing, value); 
     } 
    } 

и весь класс наследуется от ObservableObject, ты сделал это?

+0

Hi, thx! Проверьте Редактировать сообщение. – avechuche

+0

Что относительно класса статьи? – MohamedHamza

+0

Его простой класс, имеет только 5 параметров – avechuche