Heim > Backend-Entwicklung > C++ > Wie binde ich Spalten mithilfe von XAML dynamisch an ein WPF-DataGrid?

Wie binde ich Spalten mithilfe von XAML dynamisch an ein WPF-DataGrid?

Patricia Arquette
Freigeben: 2025-01-22 08:16:14
Original
168 Leute haben es durchsucht

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

Dynamische Bindung von Spalten in WPF DataGrid

Die Columns-Eigenschaft des WPF DataGrid ist schreibgeschützt, was beim Versuch, Daten mit einer variablen Anzahl von Spalten programmgesteuert zu binden, zu Herausforderungen führt.

Stellen Sie sich das folgende Szenario vor:

<code class="language-csharp">class Data
{
    public IList<ColumnDescription> ColumnDescriptions { get; set; }
    public string[][] Rows { get; set; }
}</code>
Nach dem Login kopieren

Um diese Daten im DataGrid anzuzeigen, müssen die Spalten dynamisch generiert werden:

<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>
Nach dem Login kopieren

Ist es möglich, diesen Code durch Datenbindung in der XAML-Datei zu ersetzen?

Lösung: BindableColumns angehängte Attribute

Während die Columns-Eigenschaft weiterhin schreibgeschützt ist, kann eine zusätzliche Eigenschaft namens BindableColumns erstellt werden:

<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>
Nach dem Login kopieren

Sie können dann die BindableColumns-Eigenschaft an die ObservableCollection von DataGridColumn-Objekten in XAML binden:

<code class="language-xml"><DataGrid Name="dataGrid">
    local:DataGridColumnsBehavior.BindableColumns="{Binding ColumnCollection}"
    AutoGenerateColumns="False"
    ... /></code>
Nach dem Login kopieren

Anwendung

Um das BindableColumns-Verhalten zu verwenden, definieren Sie eine ObservableCollection von DataGridColumn-Objekten:

<code class="language-csharp">public ObservableCollection<DataGridTextColumn> ColumnCollection
{
    get;
    private set;
}</code>
Nach dem Login kopieren

Und aktualisieren Sie die Spalte dynamisch über das CollectionChanged-Ereignis:

<code class="language-csharp">columns.CollectionChanged += (sender, e2) =>
{
    // ...
};</code>
Nach dem Login kopieren

Diese Problemumgehung ermöglicht die Datenbindung von Spalten im DataGrid, ohne die schreibgeschützte Columns-Eigenschaft zu ändern.

Das obige ist der detaillierte Inhalt vonWie binde ich Spalten mithilfe von XAML dynamisch an ein WPF-DataGrid?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage