我们有很多DataGrid
动态数据绑定,所以我们总是使用AutoGenerateColumns=True
。对于bool
列会生成DataGridCheckBoxColumn
,但对于可空的布尔值(在C#中为bool?
)会生成默认值DataGridTextColumn
。有没有什么办法可以强制DataGrid
自动生成一个DataGridCheckBoxColumn
为可空布尔值?不喜欢与实施有关的黑客行为。还有一些代码隐藏例如在AutoGeneratingColumn
事件中被接受。WPF DataGrid强制绑定DataGridCheckBoxColumn当AutoGenerateColumns可为空bool
2
A
回答
8
要注册到AutoGeneratingColumn事件并更改生成列基于列的类型,就像这样:
private void dataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(bool?))
{
DataGridCheckBoxColumn checkBoxColumn=new DataGridCheckBoxColumn();
checkBoxColumn.Header = e.Column.Header;
checkBoxColumn.Binding = new Binding(e.PropertyName);
checkBoxColumn.IsThreeState = true;
// Replace the auto-generated column with the checkBoxColumn.
e.Column = checkBoxColumn;
}
}
0
你不得不尝试一下 - 我不是VS近 - 但是你应该能够使用这种轻松解决它......
使用'方法'到bind
到你的命令
(全部是MVVM直 - 你只需要一个AutoGenerateColumnEvent
附加属性。
然后在您的命令处理中,像我那样 - 替换列 - 就像已经建议的那样。
1)使用所提供的Attach
类,添加命名空间等
2) 而在你的XAML ...
<DataGrid
local:Attach.AutoGenerateColumnEvent="{Binding AutoGeneratingColumnCommand}" AutoGenerateColumns="True" />
3) 而在你的视图模型...
RelayCommand _autoGeneratingColumnCommand;
public RelayCommand AutoGeneratingColumnCommand
{
get
{
return _autoGeneratingColumnCommand ?? (_autoGeneratingColumnCommand = new RelayCommand(param =>
{
var e = param as DataGridAutoGeneratingColumnEventArgs;
var type = ((PropertyDescriptor)e.PropertyDescriptor).PropertyType;
if (type == typeof(bool?))
e.Column = new DataGridCheckBoxColumn();
},
param => true));
}
}
注:对于一个更通用的解决方案...
您可以使用
PropertyDescriptor
得到属性类型 - 和 基于它所通用的决定 - 这几乎是你所需要的 我想,我还没有尝试过,虽然。所以你必须尝试一下。
+0
好的解决方案,但更喜欢另一个,因为我们根本不使用MVVM),并且因为解决方案可以在DataGrid级别实现(具有高度定制的DataGrid控件并且可以在那里实现),而不是模型视图应该在应用程序的所有'Datagrid's中默认实现,而不必在每个视图中实现。 – 2013-04-10 02:54:45
相关问题
- 1. WPF DataGrid SelectionChanged和DataGridCheckBoxColumn
- 2. 将可见性绑定到WPF dataGrid中的bool值
- 3. DataGridCheckBoxColumn立即绑定
- 4. WPF DataGrid绑定
- 5. Wpf工具包datagrid DataGridCheckBoxColumn on_click事件:
- 6. wpf datagrid当前项目绑定
- 7. 当绑定到DataView时WPF DataGrid验证
- 8. WPF的Datagrid:强制刷新
- 9. WPF Datagrid - RowDetails绑定到可选属性?
- 10. WPF DataGrid ClipboardBinding可能的多重绑定?
- 11. WPF DataGridCheckBoxColumn:如果绑定值为null,如何隐藏复选框?
- 12. WPF DataGridCheckBoxColumn自定义样式?
- 13. WPF DataGrid绑定DataGridCell内容
- 14. WPF DataGrid的绑定问题
- 15. WPF ToolKit Datagrid刷新绑定
- 16. WPF Datagrid绑定到xml
- 17. WPF DataGrid RowHeader数据绑定
- 18. WPF DataGrid组合框绑定
- 19. WPF中的Datagrid绑定
- 20. 问题绑定到WPF Datagrid
- 21. WPF DataGrid ItemsSource绑定问题
- 22. 在WPF中强制绑定验证
- 23. 为什么我可以绑定到ListBox但不能绑定到WPF中的DataGrid?
- 24. WPF Datagrid单元格为空
- 25. DataGrid显示为空MVVM Wpf
- 26. 转换可为空bool? to bool
- 27. 绑定WPF4 Datagrid空集合
- 28. 空的DataGrid绑定列表
- 29. 如何强制更新可可绑定?
- 30. 的DataGrid - 绑定定制与子表
太棒了!我不确定是否可以用新的'DataGridCheckBoxColumn'来替换生成的。 – 2013-04-10 02:51:17