c# wpf 没有datagridview
时间: 2025-06-21 21:54:25 浏览: 8
### C# WPF 中 DataGrid 的功能与替代方案
在 C# WPF 开发中,`DataGrid` 是一种强大的控件,用于展示表格数据并支持多种交互方式。虽然它不像 WinForms 中的 `DataGridView` 那样提供开箱即用的一些特性,但它可以通过扩展实现类似甚至更高级的功能。
#### 数据绑定
WPF 的 `DataGrid` 支持通过数据绑定动态加载数据源。例如,在引用中的示例展示了如何设置 `ItemsSource` 属性[^2]:
```xml
<ui:DataGrid Height="400" ItemsSource="{Binding People}">
</ui:DataGrid>
```
这里的数据源是一个名为 `People` 的集合属性,通常可以是 `ObservableCollection<T>` 类型以便实时更新界面。
#### 获取选中单元格信息
如果需要获取当前选中的行或单元格的信息,可以利用 `SelectedItem` 和 `SelectedCells` 属性。以下是从引用中提取的一个方法[^1]:
```csharp
DataGridRow rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
if (rowContainer != null && dataGrid.SelectedItem != null)
{
var selectedObject = dataGrid.SelectedItem;
}
```
此代码片段演示了如何基于索引找到特定的 `DataGridRow` 并访问其关联的对象实例。
#### 添加选择框列
为了模拟 `DataGridView` 提供的选择框行为,可以在 XAML 定义中加入一列表头为复选框的列:
```xml
<DataGridCheckBoxColumn Header="Select" Binding="{Binding IsSelected}" />
```
这里的 `IsSelected` 应该是在绑定对象模型中存在的布尔字段或者依赖项属性。
#### 实现分组和统计
对于复杂场景下的分组以及每组内的汇总计算需求,则可参照如下做法[^3]:
```csharp
public class GroupSum : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double total = 0.0;
if (value is ReadOnlyObservableCollection<object> items)
{
foreach (var item in items)
{
var de = item as YourCustomClassType; // 替换为您实际使用的类型
if(de != null){
total += de.YourPropertyToAggregate; // 修改成您要聚合的具体数值属性名
}
}
}
return Math.Round(total, 2).ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
```
随后将其应用于资源字典并通过模板应用到视图层。
#### 自定义数据结构作为基础
当构建简单的实验项目时,可能只需要一个基本的数据类来表示每一行记录的内容[^4]:
```csharp
public class Book
{
public required string Title { get; set; }
public required string Author { get; set; }
public DateTime Time { get; set; }
}
```
以上例子说明了一个典型的书籍条目应该具备哪些基本信息成员变量及其修饰符设定原则。
---
阅读全文
相关推荐


















