Как создать новый экземпляр ItemCollection

Я работаю с WPF по шаблону MVVM.

Мне нужен экземпляр ItemCollection для размещения в моей ViewModel, которую я затем могу привязать к свойству Items DataGrid в своем представлении.

Я собираюсь программно добавлять кнопки в этот ItemCollection.

Я заметил, что у него нет общедоступного конструктора, и он запечатан. Есть ли способ заполучить экземпляр? Существуют ли какие-либо статические/фабричные методы, которые будут возвращать экземпляр?

Спасибо


person Some Dude    schedule 05.09.2013    source источник
comment
Вы не добавляете элементы пользовательского интерфейса в ViewModel в MVVM. Используйте ObservableCollection<ICommand>.   -  person Federico Berasategui    schedule 05.09.2013


Ответы (2)


Нет, вы не можете создать его и нет, он вам даже не нужен. Используйте свойство ItemsSource для привязки данных ваш источник данных вместо этого в сетку, как это обычно бывает в WPF.

Единственный раз, когда вы взаимодействуете с ItemsCollection, — это прямой доступ к свойству Items ItemsControl, то есть при ручной работе с данными вместо привязки. Этот тип манипуляции полностью противоречит духу MVVM, так что вы ничего не упускаете.

person Jon    schedule 05.09.2013
comment
Или при создании пользовательского элемента управления, производного от ItemsControl, что является совершенно другой историей. - person Federico Berasategui; 05.09.2013
comment
Отлично работает, я связал ItemsSource с ObservableCollection‹ICommand›, рекомендованным @HighCore. Спасибо - person Some Dude; 05.09.2013
comment
Я не думаю, что когда-либо был случай, когда вам нужно было бы создать новый экземпляр. ItemsCollection предназначался для внутреннего использования, как подразумевает @Jon. Класс ObservableCollection предназначался для использования для представления коллекции для чтения/записи, чего действительно хочет OP. В конечном счете, все сводится к определению модели представления, для которой вы можете указать шаблон (в случае OP, Button) и привязке их коллекции к элементу управления. Это это шаблон MVVM; то, что просил ОП, не является. - person ; 09.02.2017

Вот обходной путь для создания пустого ItemCollection:

var myCollection = new DataGrid().Items;
person Danny Beckett    schedule 28.01.2015
comment
Что бы вы сделали с этим? Коллекции элементов, как правило, доступны только для чтения, поэтому вы не можете связать или назначить их AFAIK, поэтому не уверены, что это действительно полезно. - person Rick Strahl; 01.03.2020