ListView填充(使用C#)?

ListView填充(使用C#)?,c#,wpf,xaml,visual-studio-2012,C#,Wpf,Xaml,Visual Studio 2012,我想以编程方式填充WPF列表视图。 我想我已经接近答案了,但还没有解决,我使用了一种方法来填充列表视图,列表视图在XAML中是这样的 <ListView Name="listview" HorizontalAlignment="Left" Height="252" Margin="39,110,0,0" VerticalAlignment="Top" Width="340"> <ListView.View> <GridView

我想以编程方式填充WPF列表视图。 我想我已经接近答案了,但还没有解决,我使用了一种方法来填充列表视图,列表视图在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>

一个更简单的解决方案是填充一个集合并将其数据绑定到该集合,而不是与ListViewItems混为一谈。诀窍是翻转侧面的items控件,使字符串集合显示为列而不是行

XAML:


代码隐藏:

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));
        }
    }
}
使用系统;
使用System.Collections.ObjectModel;
使用System.Windows;
命名空间WpfApplication1
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
结果=新的可观察集合();
FillListView(“AAA”,新字符串[]{“A1”、“A2”、“A3”});
FillListView(“BBB”,新字符串[]{“B1”、“B2”、“B3”});
DataContext=this;
}
公共可观测收集结果{get;private set;}
私有void FillListView(字符串标题,字符串[]文本)
{
Add(Tuple.Create(header,text));
}
}
}

等等。。。你的问题是什么?我刚刚运行了你的代码,它似乎绑定了项。嗯,是的,但你知道我想要的是:col1:value1,value2,value3和col2:value1..value2当然这会上下波动,但我会得到每一列的每一个值?这适用于基于DB的应用程序,因此你可以根据两个组合框选择进行查询,你应该有一个列,列上每次按下按钮的结果-,我修改了我的答案。您只需设置
DisplayMemberBinding
。当绑定到字符串而不是对象时进行测试有点奇怪,但这是可能的。
<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));
        }
    }
}