こんにちは私はWPFアプリケーションを作成していて、listbox/listview
、MVVM
の問題があります。私は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"/>
私はObservableCollectionを認識していますが、INotifypropertyChangedを使用するとObservableCollectionとほぼ同じです。私はObservableCollectionを使用しようとしましたが、それはほとんど同じです。 http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha – Lucy
@Lucy「ObservableCollection」を使用する必要があります。これはUIのバインディングに自動的に通知します。「このコレクションは変更されているため、再描画アイテムが追加または削除されたときはいつでも自分自身を削除できます。これは、INotifyPropertyChangedと同じではないことに注意してください。INotifyPropertyChangedは、プロパティがある値から別の値に変更されたときにのみトリガします。 2番目の欠点は、選択したIDの新しいQuickNoteオブジェクトを作成しているように見えることです。デフォルトでWPFはオブジェクトをReferenceで比較するため、リストのQuickNoteへの参照は新しく作成された参照と異なる – Rachel
QuickNoteとは何ですか? – Ian