如何将“select”列添加到带MVVM的Silverlight DataGrid中

时间:2011-07-26 16:22:45

标签: .net wpf mvvm datagrid checkbox

我需要在DataGrid中有一个带有复选框的列,供用户选择各种行(稍后将执行操作)。 GridS项目绑定到ObservableCollection。我最快的解决方案(不是最好的,但只是为了让它工作)我认为是从集合中的类继承,添加一个我可以绑定的IsSelected属性,并从那里工作。但是,我开始使用的集合已经实例化,并且向下转换/逆转对我来说不起作用。并且,重新创建派生类的集合是不可行的。

所以,我现在正在寻找一个简单的解决方案,可能在复选框列上有附加行为。我试图不花太多时间在这上面,所以我需要一些想法。

2 个答案:

答案 0 :(得分:0)

我认为你所做的是一个很好的方法。您正在使用的子类是原始类的“ViewModel”。

但是,我在this post by Laurent Bugnion中找到了另一种方法,它使用SelectedItems控件的DataGrid集合,不幸的是,你无法直接绑定它,因为它不是DependencyProperty,但他使用MVVMLight Toolkit中的EventToCommand行为,并将SelectedItems集合作为CommandParameter传递。

我希望这会有所帮助;)

答案 1 :(得分:0)

我最终不得不这样做:

1)在TemplateColumn中使用CheckBox而不是DataGridCheckBoxColumn,因为DataGridCheckBoxColumn没有Checked&未经检查的事件要挂钩。

2)在复选框上为Checked和Unchecked事件创建一个行为类,每个事件都有单独的命令;我必须创建一个行为类,因为虽然CheckBox已经有一个Command属性,但似乎没有任何方法可以确定控件的已检查/未检查状态,除非用作CommandParameter,我需要传递信息.G /中的DataGrid绑定项。

3)从View传入对VM的引用,并将VM声明为代码隐藏的静态资源;我必须这样做才能使用复选框绑定我的VM中的命令,同时可以访问相同的Observab