【发布时间】:2016-09-20 17:45:24
【问题描述】:
您好,我正在制作一个 WPF 应用程序,但遇到了 listbox/listview 的问题,MVVM 已实现。我正在创建一个显示在listbox 上的类列表,并且我正在通过在listbox 中选择一个项目来编辑项目。问题是当我删除一个项目时,它不会触发 UI 的 onpropertychanged 事件,但是在代码中工作,值是正确的。当我关闭窗口并重新打开它时,列表会更新,但在删除项目时不会直接更新,由于某种原因它永远不会触发 onpropertychanged 事件。
它确实可以像
那样过滤快速笔记列表quicknotelist = quicknotelist.where(x => x.id != selecteditem.id);
虽然它只工作一次,并且 UI 更新但是 selecteditem 似乎无法正常工作,即使我声明了
selecteditem = new quicknote() {*values*};
部分相关代码,我用的是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"/>
【问题讨论】: