我遵循MVVM模式。我有一个listview控件,它有多个复选框。我的viewmodel有一个Student的集合,它与listview控件有关。
public ObservableCollection<Student> students{ get; private set; }
private ObservableCollection<Student> _displays { get; set; }
viewmodel对该视图一无所知,因此无法访问listview控件
我尝试通过下面的
定义Student类public class Student
{
public string Name{ get; set; }
public string class { get; set; }
}
在viewmodel中,我想在用户选择/取消选中复选框时执行一些操作。 如何查看是否检查了哪些项目,如何在viewmodel中获取所选项目状态? 我跟随mvvm模式。
答案 0 :(得分:0)
在WPF中,我们通常使用数据绑定。这意味着理想情况下,您的数据会将Student
类的属性绑定到UI中的Checkbox
:
public class Student : INotifyPropertyChanged
{
public bool IsSomething { get; set; } // Implement INotifyPropertyChanged here
...
}
...
<Checkbox IsChecked="{Binding IsSomething}" />
如果您这样做,那么您只需查看视图模型中的相关Checkbox
对象,就可以找出检查了哪些Student
:
bool isSomething = CurrentStudent.IsSomething;
如果您想对更改的值做出反应,那么您只需要监视属性的更改:
public bool IsSomething
{
get { return isSomething; }
set
{
if (value != isSomething)
{
isSomething= value;
NotifyPropertyChanged("IsSomething");
if (isSomething) CheckedBoxWasChecked();
else CheckedBoxWasUnChecked();
}
}
}
答案 1 :(得分:0)
您可以一次检查多个项目吗?
如果没有,您可以简单地将SelectedItem属性添加到视图模型,并将listView的SelectedItem属性绑定到视图模型的SelectedItem属性。
如果您需要一次检查多个项目,可以向Student类添加一个布尔IsSelected属性。然后在列表视图的数据模板中,将复选框的IsChecked属性绑定到Student的IsSelected属性。
请确保您的视图模型和学生班实现INotifyPropertyChanged等。