首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板