Как я могу программно добавить многостолбцовый ListViewItem без какой-либо привязки данных?

У меня есть ListView с 3 заголовками, объявленными в XAML следующим образом:

<ListView Name="myListView">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="H1"/>
      <GridViewColumn Header="H2"/>
      <GridViewColumn Header="H3"/>
    </GridView>
  </ListView.View>
</ListView>

Я хочу программно добавить ListViewItem в этот ListView, имея возможность устанавливать содержимое в ListViewItem, которое будет находиться в первом, втором и третьем столбцах по отдельности. До сих пор я добрался только до этого:

ListViewItem l = new ListViewItem();
l.Content = "Content";
myListView.Items.Add(l);

Это устанавливает каждый столбец в строку «Содержание». Как изменить приведенный выше код, чтобы я мог добавить ListViewItem, который будет отображать «Содержимое 1», «Содержимое 2» и «Содержимое 3» в первом, втором и третьем столбцах соответственно? Я попытался найти свойство SubItem или ListViewSubItem в ListViewItem, но ничего не нашел.

Я предполагаю, что есть простое решение, но, возможно, я ошибаюсь. Пожалуйста, не упоминайте привязку данных, потому что мне нужен только ответ на вопрос о программной установке свойства Content для отражения отдельных изменений в каждом столбце.

Большое спасибо.


person Dalal    schedule 30.06.2010    source источник


Ответы (2)


Это не привязка данных. Думайте об операторе Binding как о присвоении имени столбцу.

<ListView Name="myListView">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="H1" DisplayMemberBinding="{Binding Col1}"/>
            <GridViewColumn Header="H2" DisplayMemberBinding="{Binding Col2}"/>
            <GridViewColumn Header="H3" DisplayMemberBinding="{Binding Col3}"/>
        </GridView>
    </ListView.View>
</ListView>

В коде:

myListView.Items.Add(new { Col1 = "test1", Col2 = "Test2", Col3="test3"});
person Robaticus    schedule 30.06.2010
comment
Это будет работать только тогда, когда количество столбцов известно во время компиляции. Я до сих пор не нашел решения для добавления массива строк, количество которых известно во время выполнения. - person Rajiv; 05.06.2013
comment
Привет @Rajiv. Вы можете сделать это программно в своем коде, но я не думаю, что вы можете сделать это декларативно в своем XAML. - person Robaticus; 24.06.2013

В winforms вот что вы делаете.

Сначала вы должны установить заголовки столбцов, иначе ничего не будет отображаться. Добавьте элементы представления списка, используя массив строк.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        listView1.View=View.Details;
        //Set Columns
        listView1.Columns.Add("Col1");
        listView1.Columns.Add("Col2");
        listView1.Columns.Add("Col3");
        //Fill Rows
        ListViewItem lvi;
        lvi=new ListViewItem(new string[] { "A", "B", "C" });
        listView1.Items.Add(lvi);
        lvi=new ListViewItem(new string[] { "D", "E", "F" });
        listView1.Items.Add(lvi);
        lvi=new ListViewItem(new string[] { "G", "H", "I" });
        listView1.Items.Add(lvi);
    }
}

скриншот результата есть

Scr

person John Alexiou    schedule 30.06.2010
comment
Я получаю эту ошибку: «System.Windows.Controls.ListViewItem» не содержит конструктора, который принимает аргументы «1». Я использую WPF. Возможно, я забыл указать это. Я бы хотел, чтобы ваше решение сработало. Это сделало бы это намного проще. - person Dalal; 30.06.2010
comment
Не могли бы вы обновить ссылку на изображение? Он мертв прямо сейчас. Спасибо - person abalter; 25.04.2014
comment
Этот ответ работает только для winforms. Обновил ответ новым снимком экрана. - person John Alexiou; 25.04.2014