【问题标题】:How can I add a "select" column to a Silverlight DataGrid w/MVVM如何将“选择”列添加到带有 MVVM 的 Silverlight DataGrid
【发布时间】:2011-10-13 13:56:52
【问题描述】:

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

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

【问题讨论】:

    标签: .net wpf mvvm datagrid checkbox


    【解决方案1】:

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

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

    我希望这会有所帮助;)

    【讨论】:

    • 这种方法的问题是 SelectedItems 独立于“选择器”列(如复选框)工作。就像我在维护自己的“SelectedItems”集合,无论在网格中选择了什么。可以选择一行,但未选中复选框。
    • 我想这也可以通过 Behaviors 之类的东西来实现,但我不习惯它们。
    • 使用扩展 DataGrid 的更通用的方法绝对是可行的方法,但我现在只需要担心这个实例,而不是猜测我需要将它扩展到多少在别处有用。
    • 好吧,您可以根据需要尽可能扩展它,如果您以后需要它,可以添加更多功能;)
    【解决方案2】:

    我最终不得不这样做:

    1) 在 TemplateColumn 中使用 CheckBox 而不是 DataGridCheckBoxColumn,因为 DataGridCheckBoxColumn 没有 Checked 和 Unchechecked 事件可以挂钩。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2012-12-17
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多