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

如何使用 XAML 将列动态绑定到 WPF DataGrid?

Patricia Arquette
发布: 2025-01-22 08:16:14
原创
169 人浏览过

How to Dynamically Bind Columns to a WPF DataGrid using XAML?

在WPF DataGrid中动态绑定列

WPF DataGrid的Columns属性是只读的,这在尝试以可变列数编程方式绑定数据时带来了挑战。

考虑以下场景:

<code class="language-csharp">class Data
{
    public IList<ColumnDescription> ColumnDescriptions { get; set; }
    public string[][] Rows { get; set; }
}</code>
登录后复制

要在DataGrid中显示此数据,必须动态生成列:

<code class="language-csharp">for (int i = 0; i < data.ColumnDescriptions.Count; i++)
{
    dataGrid.Columns.Add(new DataGridTextColumn
    {
        Header = data.ColumnDescriptions[i].Name,
        Binding = new Binding(string.Format("[{0}]", i))
    });
}</code>
登录后复制

是否可以在XAML文件中用数据绑定替换此代码?

解决方案:BindableColumns 附加属性

虽然Columns属性仍然是只读的,但可以创建一个名为BindableColumns的附加属性:

<code class="language-csharp">public class DataGridColumnsBehavior
{
    public static readonly DependencyProperty BindableColumnsProperty =
        DependencyProperty.RegisterAttached("BindableColumns",
                                            typeof(ObservableCollection<DataGridTextColumn>),
                                            typeof(DataGridColumnsBehavior),
                                            new UIPropertyMetadata(null, BindableColumnsPropertyChanged));
    // ...
}</code>
登录后复制

然后,可以在XAML中将BindableColumns属性绑定到DataGridColumn对象的ObservableCollection:

<code class="language-xml"><DataGrid Name="dataGrid">
    local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}"
    AutoGenerateColumns="False"
    ... /></code>
登录后复制

使用方法

要使用BindableColumns行为,请定义一个DataGridColumn对象的ObservableCollection:

<code class="language-csharp">public ObservableCollection<DataGridTextColumn> ColumnCollection
{
    get;
    private set;
}</code>
登录后复制

并通过CollectionChanged事件动态更新列:

<code class="language-csharp">columns.CollectionChanged += (sender, e2) =>
{
    // ...
};</code>
登录后复制

此变通方法允许在DataGrid中进行列的数据绑定,而无需修改只读Columns属性。

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

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