web-dev-qa-db-de.com

Hinzufügen von Elementen zu Spalten in einer WPF-Listenansicht

Ich habe seit einiger Zeit Probleme damit, Elemente zu 2 Spalten in einem ListView hinzuzufügen. In meiner Windows Forms-Anwendung hatte ich ungefähr Folgendes:

// In my class library:
public void AddItems(ListView listView)
{
    var item = new ListViewItem {Text = "Some Text for Column 1"};
    item.SubItems.Add("Some Text for Column 2");

    listView.Items.Add(item);
}

Ich würde diese Klasse dann von meinem Form.cs.

Wie kann ich das in WPF machen? Am liebsten würde ich nicht viel XAML verwenden.

33
davidwroxy

Lösung mit weniger XAML und mehr C #

Wenn Sie das ListView in XAML definieren:

<ListView x:Name="listView"/>

Dann können Sie Spalten hinzufügen und in C # einfügen:

public Window()
{
    // Initialize
    this.InitializeComponent();

    // Add columns
    var gridView = new GridView();
    this.listView.View = gridView;
    gridView.Columns.Add(new GridViewColumn { 
        Header = "Id", DisplayMemberBinding = new Binding("Id") });
    gridView.Columns.Add(new GridViewColumn { 
        Header = "Name", DisplayMemberBinding = new Binding("Name") });

    // Populate list
    this.listView.Items.Add(new MyItem { Id = 1, Name = "David" });
}

Siehe Definition von MyItem weiter unten.

Lösung mit mehr XAML und weniger C #

Es ist jedoch einfacher, die Spalten in XAML zu definieren (innerhalb der ListView -Definition):

<ListView x:Name="listView">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Id}"/>
            <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
        </GridView>
    </ListView.View>
</ListView>

Und dann füllen Sie einfach die Liste in C #:

public Window()
{
    // Initialize
    this.InitializeComponent();

    // Populate list
    this.listView.Items.Add(new MyItem { Id = 1, Name = "David" });
}

Siehe Definition von MyItem weiter unten.

MyItem Definition

MyItem ist wie folgt definiert:

public class MyItem
{
    public int Id { get; set; }

    public string Name { get; set; }
}
96
Phil