2017-04-25 17 views
0

我擡頭看了幾個ObservableCollection的實現,這裏就是我最終的結果。我在啓動服務時得到了ADD的事件,但是當我調用並更新列表中的對象的屬性時,集合根本不會通知或觸發。ObservableCollection不會引發CollectionChnaged

ObservableCollection處理程序。

public class iGamingObservableCollection 
{ 
    ObservableCollection<GameInstance> _contentList; 
    public iGamingObservableCollection() 
    { 
     _contentList = new ObservableCollection<GameInstance>(); 
     _contentList.CollectionChanged += ContentCollectionChanged; 
    } 
    public ObservableCollection<GameInstance> ContentList 
    { 
     get { return _contentList; } 
    } 

    public void ContentCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     if (e.Action == NotifyCollectionChangedAction.Remove) 
     { 
      foreach (GameInstance item in e.OldItems) 
      { 
       Console.WriteLine("removed: State is now: " + item.InstanceState); 
       //Removed items 

      } 
     } 
     else if (e.Action == NotifyCollectionChangedAction.Add) 
     { 
      foreach (GameInstance item in e.NewItems) 
      { 
       Console.WriteLine("added: State is now: " + item.InstanceState); 
       //Added items 
       //item.PropertyChanged += InstancePropertyChange; 
      } 
     } 
     else if (e.Action == NotifyCollectionChangedAction.Replace) 
     { 
      foreach (GameInstance item in e.NewItems) 
      { 
       Console.WriteLine("changed: State is now: " + item.InstanceState); 
       //Changed items 

       //item.PropertyChanged += InstancePropertyChange; 

      } 
     } 
     else if (e.Action == NotifyCollectionChangedAction.Replace) 
     { 
      foreach (GameInstance item in e.OldItems) 
      { 
       Console.WriteLine("changed: State is now: " + item.InstanceState); 
       //Changed items 

       //item.PropertyChanged += InstancePropertyChange; 

      } 
     } 
    } 

ObservableCollection控制器

public class InstanceManagerService : IInstanceManager 
{ 
    //TODO: FIX THAT CLASS.. THIS IS INITIAL IMPLEMENTATION!!! 
    IGameInstanceRepository instanceRepository; 
    iGamingObservableCollection notifyList = new iGamingObservableCollection(); 
    //private Timer updateNotifierTimer; 
    public InstanceManagerService(IGameInstanceRepository instanceRepository) 
    { 
     this.instanceRepository = instanceRepository; 
     populateNotifyList(); 
     //updateNotifierTimer = new Timer((e) => { populateNotifyList(); }, null, 120 , (int)(TimeSpan.FromMinutes(2).TotalMilliseconds)); 
    } 

    private void populateNotifyList() 
    { 
     var list = instanceRepository.getInstances(); 

     foreach (var l in list) 
     { 
      notifyList.ContentList.Clear(); 
      notifyList.ContentList.Add(l); 
     } 
     Console.WriteLine("Notify list content updated."); 
    } 

public bool releaseInstance(Guid instanceId) 
    { 
     if (instanceRepository.UpdateGameInstanceToFree(instanceId)) 
     { 
      var notifyTask = notifyList.ContentList.Where(g => g.Id == instanceId).FirstOrDefault(); 
      notifyTask.InstanceState = InstanceState.Free; 

      return true; 
     } 
     return false; 
    } 

回答

3

但是當我做呼叫並更新對象的屬性列表中,集合不通知或觸發的。

ObservableCollection不能這樣工作。這是CollectionChanged當一個對象被添加/刪除其集合時觸發。這就是爲什麼NotifyCollectionChangedAction沒有Updated值。要做你想做的事,在課堂上實現INotififyPropertyChanged

+0

我以前有過,但不知怎的,它停止工作,我結束了這一點。我將嘗試恢復使用INotifyPropertyChanged的模型。 – vLr

相關問題