在WPF ListView中添加项目到列中

42

我一直在努力实现向 ListView 中的两列添加项目。在我的Windows Forms应用程序中,我有类似这样的代码:

// 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);
}

我会从我的Form.cs中调用这个类。

在WPF中我应该如何做?最好不要使用过多的XAML。


2
XAML有什么问题吗? - ProfK
1个回答

125

更少的XAML,更多的C#解决方案

如果您在XAML中定义ListView

<ListView x:Name="listView"/>

然后您可以在C#中添加列并填充数据:

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" });
}

请查看下面MyItem的定义。

更多XAML,少一点C#的解决方案

然而,在XAML中定义列更加容易(在ListView的定义内部):

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

然后在C#中仅需填充列表:

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

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

请看下面MyItem的定义。

MyItem 定义

MyItem 的定义如下:

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

    public string Name { get; set; }
}

UWP / WinRT 的部分解决方案:https://dev59.com/S2nWa4cB1Zd3GeqP0nJ_ - Martin Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接