c# - ListView 人口(使用 C#)?

标签 c# wpf xaml visual-studio-2012

我想以编程方式填充 WPF ListView 。 我认为我接近答案但尚未解决,我使用一种方法来填充 ListView , ListView 在 XAML 中看起来像这样

<ListView Name="listview" HorizontalAlignment="Left" Height="252" Margin="39,110,0,0" VerticalAlignment="Top" Width="340">
        <ListView.View>
            <GridView x:Name="gridcontrol">
                <GridViewColumn/>
            </GridView>
        </ListView.View>
</ListView>

到目前为止我所做的是:

private void FillListView( String[] texto ) {

        GridViewColumn gvc = new GridViewColumn();
        gvc.Header = cmbx2.SelectedItem.ToString();
        gridcontrol.Columns.Add(gvc);

        foreach (String s in texto) {

            ListViewItem item = new ListViewItem();
            item.Content = s;
            listview.Items.Add(item);

        }

        listview.View = gridcontrol;
    }

最佳答案

一个更简单的解决方案不是乱用 ListViewItems,而是填充一个集合并对其进行数据绑定(bind)。诀窍是翻转侧面的项目控件,以便您的字符串集合显示为列而不是行。

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <ItemsControl ItemsSource="{Binding Path=Results}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Path=Item1}" FontWeight="Bold" />
                    <ItemsControl ItemsSource="{Binding Path=Item2}" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

</Window>

代码隐藏:

using System;
using System.Collections.ObjectModel;
using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Results = new ObservableCollection<Tuple<string, string[]>>();

            FillListView("AAA", new string[] { "A1", "A2", "A3" });
            FillListView("BBB", new string[] { "B1", "B2", "B3" });

            DataContext = this;
        }

        public ObservableCollection<Tuple<string, string[]>> Results { get; private set; }

        private void FillListView(string header, string[] text)
        {
            Results.Add(Tuple.Create(header, text));
        }
    }
}

关于c# - ListView 人口(使用 C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557757/

相关文章:

c# - Debug.Assert() 仅在跨过它时触发

c# - 没有构造函数的本地化依赖注入(inject)

wpf - DataGrid 单元格无效时如何去除红色边框?

c# - 可重复使用的动画

xaml - XAML 中的属性 Duration 不允许值类型 Duration

c# - 使用 PlaceholderText 时 UWP TextBox.Text 绑定(bind)不更新

c# - 按顺序获取文件中的行的最佳方法?

c# - MongoDB C# 从 ID 列表中获取所有文档

c# - 如何在不阻塞 UI 线程的情况下在执行多个任务后继续?

c# - 将像素着色器应用于图像