2016-07-04 26 views
0

UIの更新に問題があります。私は私のUI要素を結合するために使用され、クラスを持っている:INotifyCollectionChanged UIが更新されない

public class engine : INotifyCollectionChanged 
    { 
     RWProject project = new RWProject(); 

     public ObservableCollection<string> ProjectListBinding 
     { 
      get { return project.list(); } 
     } 

     public event NotifyCollectionChangedEventHandler CollectionChanged; 
     private void OnCollectionChanged(NotifyCollectionChangedEventArgs eventArgs) 
     { 
      if (this.CollectionChanged != null) 
      { 
       this.CollectionChanged(this, eventArgs); 
      } 
     } 

     private ICommand _usunProjekt; 
     public ICommand UsunProjekt 
     { 
      get 
      { 
       _usunProjekt = new UsunProjektCommand(); 
       return _usunProjekt; 
      }   
     } 

     private ICommand _dodajProjekt; 
     public ICommand DodajProjekt 
     { 
      get 
      { 
       _dodajProjekt = new DodajNowyProjektCommand(); 
       return _dodajProjekt; 
      } 
     } 
    } 

ProjectListBindingは、フォルダ内のファイル名のリストであり、この名前は、ListViewコントロールに表示されます。

コマンドDodajProjekt同じフォルダ内に新しいファイルを作成する(UsunProjekt - 削除) コマンドはボタンにバインドされます。

は、私がイベント

OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)) 

コマンドが実行された後にUIを更新するために上昇する必要がありますが、このコードの一部を添付する場所を私は知っていません。それとも別のやり方でやるべきだろうか? 私が既に持っているコードでは、バインディングとコマンドは正常に動作しています。 これを解決するお手伝いができますか?
Piotr

+0

クラスが 'INotifyCollectionChanged'を実装していて、コレクションインターフェイスも実装しないと意味がありません。 'ICollection'または' IList'です。 – Clemens

+0

はい、そうですが、ObservableCollectionを強制的にリフレッシュしてUI olsoにすることは可能ですか? – Piotr

+0

ObservableCollectionは、要素の追加または削除時にCollectionChangedイベントを発生させます。それ以外は意味をなさないでしょう。既存の要素が変更されたときにUIを更新する必要がある場合、要素クラスはINotifyPropertyChangedを実装する必要があります。 – Clemens

答えて

2

INotifyCollectionChangedを実装するべきではありません。あなたの意見からProjectListBindingにバインドする必要があります。INotifyCollectionChangedが自動的に表示され、UIが更新されます。もちろん、あなたが持っているクラス(すなわち、engine)があなたのビューモデルであると仮定します。

コマンドを実行するときは、INotifyCollectionChangedイベントを発生させるには、ProjectListBindingを更新する必要があります。つまり、コマンドDodajNowyProjektCommandUsunProjektの両方がProjectListBindingで動作している必要があります。

関連する問題