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

関連する問題