2016-05-23 10 views
0

こんにちは私はWPFアプリケーションを作成していて、listbox/listviewMVVMの問題があります。私はlistboxに表示されているクラスのリストを作成しており、listboxのアイテムを選択してアイテムを編集しています。問題は、UIにonpropertychangedイベントをトリガーしないアイテムを削除するときですが、コード内で作業しているため、値は正しいです。ウィンドウを閉じて再度開くと、リストが更新されますが、アイテムが削除されたときには直接表示されません。何らかの理由でonpropertychangedイベントが発生することはありません。WPFリストボックスの項目を正しく削除する

それはちょうどselecteditemは私が

selecteditem = new quicknote() {*values*}; 
を宣言していていても正常に動作するようには思えないしかしそれは一度だけしかしおよびUIのアップデート働く

quicknotelist = quicknotelist.where(x => x.id != selecteditem.id); 

ようquicknotelistをフィルタリングするための作業を行います

関連コードの一部です。INotifyPropertyChanged

private QuickNote selectedNote = new QuickNote(); // weeeeeee 
    public QuickNote SelectedNote 
    { 
     get 
     { 
      return selectedNote; 
     } 
     set 
     { 
      if (SelectedNote != null) 
      { 
       selectedNote = value; 
       OnPropertyChanged("SelectedNote"); 
       EnableEditNoteBox = true; 
      } 
     } 
    } 

    private List<QuickNote> quickNoteList = new List<QuickNote>(); 
    public List<QuickNote> QuickNoteList 
    { 
     get { return quickNoteList; } 
     set { quickNoteList = value; OnPropertyChanged("QuickNoteList"); } 
    } 

は、項目を削除する方法です。

private void DeleteNote(object obj) 
    { 
     if (SelectedNote != null) 
     { 
      QuickNoteList.Remove(SelectedNote); 
    // I want this to trigger  onpropertychanged without using myclasslist = newclasslist; since it messes up selecteditem to null. 

     } 
    } 

はxaml部分を削除します。

<ListBox 
    Width="713" 
    Height="230" 
    SelectedItem="{Binding SelectedNote, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
    ItemsSource="{Binding QuickNoteList,BindsDirectlyToSource=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
    DisplayMemberPath="Notes" 
    Foreground="Black" 
    ScrollViewer.VerticalScrollBarVisibility="Visible" 
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
    ScrollViewer.CanContentScroll="False"/>  

答えて

0

可能であればコメントを残しておきます。 ObservableCollectionをルックアップする必要があります。私はQuickNoteListがこのタイプであるべきだと思う。

+0

私はObservableCollectionを認識していますが、INotifypropertyChangedを使用するとObservableCollectionとほぼ同じです。私はObservableCollectionを使用しようとしましたが、それはほとんど同じです。 http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha – Lucy

+0

@Lucy「ObservableCollection」を使用する必要があります。これはUIのバインディングに自動的に通知します。「このコレクションは変更されているため、再描画アイテムが追加または削除されたときはいつでも自分自身を削除できます。これは、INotifyPropertyChangedと同じではないことに注意してください。INotifyPropertyChangedは、プロパティがある値から別の値に変更されたときにのみトリガします。 2番目の欠点は、選択したIDの新しいQuickNoteオブジェクトを作成しているように見えることです。デフォルトでWPFはオブジェクトをReferenceで比較するため、リストのQuickNoteへの参照は新しく作成された参照と異なる – Rachel

+0

QuickNoteとは何ですか? – Ian

関連する問題