【问题标题】:'Check All' checkbox for a WPF DataGrid, where the checkboxes already have a source?WPF DataGrid 的“全选”复选框,其中复选框已经有来源?
【发布时间】:2011-06-08 15:45:15
【问题描述】:

有一个 WPF DataGrid,其列具有复选框。这些复选框已经绑定到某些数据源。我们想要的是每个列的复选框,用于选中/取消选中所有复选框(并因此更新数据源以使所有值都相同)。

如果没有现有数据源,则此处的现有解决方案有效 - 但我们实际上有两个,“全选”复选框和行中其他复选框绑定到的实际数据,如果这有意义的话。

如果我们可以使用触发器或类似的东西而不是“代码隐藏”,那将是理想的。有声明式解决方案吗?

【问题讨论】:

  • 数据网格的数据源是什么?是否使用了诸如 ItemsSource="{Binding MyItemsCollection}" 之类的绑定?
  • 数据源实际上是另一个DataGrid的列的集合。所以它使用 ItemsSource="{Binding Element=... }"

标签: c# .net wpf .net-4.0


【解决方案1】:

使 CheckBox 的 Click 事件指向 ViewModel 中的命令,该命令迭代 DataSource 并将 IsChecked 设置为 true。

【讨论】:

  • 谢谢你,但这不起作用,这是我不够明确的错。 DataSource 位于 View(另一个 DataGrid)而不是 ViewModel 中。这完全是 UI 交互逻辑(使用复选框来冻结列等),所以它不是 ViewModel。
  • @Fugu 难道你不能仍然使用代码隐藏并为DataGrid获取你的数据源,然后遍历它并设置IsChecked=true吗?
  • 感谢 Rachel,我们最终就是这样做的。很遗憾,如果不访问底层数据源,似乎没有办法做到这一点:)
  • @Rachel,我可以将复选框单击事件绑定到按钮单击事件吗?如果有怎么办?
  • @NewCoderInTown 我想,但 OnClick 通常是视图层中的东西,所以它们都有相同的引用不是问题。我建议对您正在寻找的内容提出一个新问题。您可以将事件(例如 OnClick)绑定到命令,也可以创建一个 Button(这样您就可以绑定 Command),然后使用 CheckBox 进行绘制。
【解决方案2】:

标准解决方案可以与数据绑定网格一起使用。可以找到一个示例 (http://www.4guysfromrolla.com/articles/120810-1.aspx)。这个例子完全是客户端。

问题出现在您回发时,但只有当您没有将检查全部持久化回数据库并刷新您绑定的数据时才会出现问题。在这些情况下,您需要确保传回某些内容以指示全部选中,以便您可以在回发后再次动态设置这些框。

【讨论】:

  • 我相信这个问题是关于 WPF 数据网格的。
猜你喜欢
  • 2018-06-24
  • 2018-08-03
  • 2013-06-11
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多