ListView在viewmodel中选择了项目访问权限

时间:2014-06-04 13:35:03

标签: wpf listview selecteditem

我遵循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模式。

2 个答案:

答案 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等。