Добавить программно ListViewItem в Listview в WPF

Возможный дубликат:
WPF ListView - как добавлять элементы программно?

Как это можно сделать на С#?


person Community    schedule 20.03.2009    source источник


Ответы (6)


Вот как вы можете добавить ListViewItem, созданный в коде, к вашему ListView:

myListView.Items.Add(new ListViewItem { Content = "This is an item added programmatically." });

Однако я согласен с MrTelly в том, что в этом нет необходимости, вы должны установить ListView.ItemsSource для какой-либо коллекции, а не манипулировать ListView.Items напрямую.

Если вы дадите нам более подробную информацию о том, чего вы хотите достичь, возможно, мы сможем помочь вам сделать это с помощью WPF, что поначалу не всегда просто, но в конечном итоге намного проще.

person Robert Macnee    schedule 20.03.2009

Я задал точно такой же вопрос ЗДЕСЬ (и ответил сам себе - у меня было проблема в моем коде). Надеюсь, поможет.

person JohnIdol    schedule 20.08.2009

Добавление его непосредственно в ListView в вашем приложении не обязательно является "способом WPF". Учти это:

public class BindableListViewModel 
{

     public IList<TypeOfObjectToDisplay> AllObjectsToDisplay;
     public ICommand AddNewItemToList;

     public BindableListViewModel()
     { 
       AllObjectsToDisplay = new ObservableList<TypeOfObjectToDisplay>();
       AddNewItemToList = new RelayCommand(AddNewItem(), CanAddNewItem());
     }

     public bool CanAddNewItem()
     {
       //logic that determines IF you are allowed to add
       //For now, i'll just say that we can alway add.
        return true;
     }

     public void AddNewItem()
     {
       AllObjectsToDisplay.Add(new TypeOfObjectToDisplay());
     }

}

Затем в XAML все, что нам нужно сделать, это привязать ItemsSource нашего ListView к нашему списку AllObjectsToDisplay. Это позволяет нам отделить зависимость добавления объектов непосредственно в наш ListView; мы можем использовать силу привязки данных WPF, чтобы удалить прямую зависимость от того, КАК мы добавляем бизнес-объекты в наш контейнер пользовательского интерфейса, в котором мы их отображаем - очень полезная практика!

person Jimmy Lyke    schedule 07.02.2010

(извините, пока не могу комментировать)

Поскольку MrTelly собирается...

Привязать список к ObservableCollection

ObservableCollection<MyClassItem> lvList = new ObservableCollection<MyClassItem>();
myListview.ItemSource = lvList;

// Add an item
lvList.Add(new MyClassItem("firstname", "lastname"));

Таким образом, он будет автоматически обновлять пользовательский интерфейс при внесении изменений в коллекцию.

person Michael Olesen    schedule 07.06.2011

Если вы используете ListView по назначению, он будет привязан к базовому списку какого-либо объекта, и этот класс должен реализовывать INotifyChanged. В WPF вы не добавляете и не удаляете элементы из ListView напрямую, вы имеете дело со структурой связанного списка, и он уведомляет пользовательский интерфейс об изменении, который затем ловко перерисовывает себя с новыми элементами.

person MrTelly    schedule 20.03.2009

Вы можете динамически добавлять столбцы в ListView с помощью вложенных свойств. Прочтите эту статью в CodeProject, в ней объясняется именно это...

WPF DynamicListView — привязка к DataMatrix

person Tawani    schedule 15.05.2009