首页 > 后端开发 > C++ > 如何将动态列数绑定到 WPF DataGrid?

如何将动态列数绑定到 WPF DataGrid?

Susan Sarandon
发布: 2025-01-22 08:33:13
原创
212 人浏览过

How to Bind a Dynamic Number of Columns to a WPF DataGrid?

WPF DataGrid:动态绑定列数

问题:

一个WPF应用程序生成具有可变列数的数据集,所需的列描述包含在输出中。用于以编程方式创建列的代码涉及使用字符串格式化的绑定,例如:

dataGrid.Columns.Add(new DataGridTextColumn
{
    Header = data.ColumnDescriptions[i].Name,
    Binding = new Binding(string.Format("[{0}]", i))
});
登录后复制

目标是用XAML文件中的数据绑定替换此代码。

解决方案:

DataGrid的Columns属性是只读的,无法直接绑定。但是,可以使用名为BindableColumns的附加属性作为解决方法:

public class DataGridColumnsBehavior
{
    // 附加属性,绑定到DataGridColumn集合
    public static readonly DependencyProperty BindableColumnsProperty =
        DependencyProperty.RegisterAttached("BindableColumns",
                                            typeof(ObservableCollection<DataGridColumn>),
                                            typeof(DataGridColumnsBehavior),
                                            new UIPropertyMetadata(null, BindableColumnsPropertyChanged));
}
登录后复制

在XAML文件中,将BindableColumns属性绑定到列集合:

<DataGrid ... AutoGenerateColumns="False" local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}" Name="dataGrid"></DataGrid>
登录后复制
public ObservableCollection<DataGridColumn> ColumnCollection
{
    get;
    private set;
}
登录后复制

BindableColumnsPropertyChanged方法在绑定集合更改时更新Columns属性:

private static void BindableColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
    DataGrid dataGrid = source as DataGrid; // 获取DataGrid实例

    // 清除现有列
    dataGrid.Columns.Clear();

    ObservableCollection<DataGridColumn> columns = e.NewValue as ObservableCollection<DataGridColumn>;
    if (columns == null)
    {
        return;
    }

    // 添加新列
    foreach (DataGridColumn column in columns)
    {
        dataGrid.Columns.Add(column);
    }

    // 处理集合更改
    columns.CollectionChanged += (sender, e2) =>
    {
        // ...  处理集合变化,例如重新绑定列
        dataGrid.Columns.Clear();
        foreach (DataGridColumn column in columns)
        {
            dataGrid.Columns.Add(column);
        }
    };
}
登录后复制

此方法侦听集合更改(添加、删除、替换)并相应地更新Columns属性。 需要注意的是,在BindableColumnsPropertyChanged方法中,添加了对dataGrid实例的获取,并对集合变化事件进行了更完善的处理,确保列的更新同步。

以上是如何将动态列数绑定到 WPF DataGrid?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板