在mvvm应用程序中修改集合中的一个属性时,如何持久化数据
本文关键字:属性 一个 数据 持久化 修改 应用程序 mvvm 集合 | 更新日期: 2024-09-25 11:40:23
我的mvvm应用中有以下模型
public class Student: INotifyPropertyChanged
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
OnPropertyChanged("Name");
}
}
private bool _isSelected;
public bool IsSelected
{
get
{
return _isSelected;
}
set
{
_isSelected = value;
OnPropertyChanged("IsSelected");
}
}
}
我有以下视图模型
public class StudentViewModel : INotifyPropertyChanged
{
private ObservableCollection<Student> _students;
public ObservableCollection<Student> Students
{
get
{
return utilslib.Getstudents();
}
set
{
_students = value;
OnPropertyChanged("Students");
}
}
}
我有以下列表,我将与学生收藏绑定。
<<Button Command="{Binding DeleteSelectedStudentsCommand}" Name="buttontodeletestudents" content ="Delete"/>
<ListBox Name="studentslist" ItemsSource="{Binding Students}" Margin="0,0,10,10" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Name="hobbycheck" Content="{Binding Path=Name}"
IsChecked="{Binding IsSelected,ModeTwoWay}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在视图模型中,当用户单击按钮"Delete"时,我实现了icommand DeleteSelectedStudentsCommand。我想删除IsSelected设置为true的记录,并使用下面的语句进行删除。
var students = Students.Where( s => s.IsSelected);
当复选框被选中时,我会在Model类中触发ischecked事件。但当用户单击"删除"按钮时,我看不到任何选中复选框的记录将isselected设置为true。如何在集合中保持IsSelected属性的值?
我的猜测是,每次调用Students时,getter都会给您新的集合,这就是为什么IsSelected属性似乎没有持久化的原因。您在一个集合中设置了Student的IsSelected属性,并在其他集合中检查了相同的属性。
这可以通过检查utilslib来确认。获取学生()。这种方法能做什么?它真的每次调用都返回不同的ObservableCollection吗?
下面更新的代码已经修复了这个问题。
private ObservableCollection<Student> _students;
public ObservableCollection<Student> Students
{
get
{
if(_students==null)
return utilslib.Getstudents();
else
return _students
}
set
{
_students = value;
OnPropertyChanged("Students");
}
}