#wpf #data-binding #datagrid #wpfdatagrid
#wpf #привязка данных #сетка данных #wpfdatagrid
Вопрос:
У меня есть сетка данных, и я заполняю ее при загрузке окна, вот так:
private void Window_Loaded(object sender, RoutedEventArgs e) {
var list = DbService.GetStuffsFull();
dataGrid.ItemsSource = list;
}
и когда я пытаюсь добавить новую строку во время выполнения с помощью этого кода:
Stuff item = new Stuff();
dataGrid.Items.Add(item);
Я получаю эту ошибку:
Операция недопустима, пока используется ItemsSource. Доступ к элементам и их изменение с помощью ItemsControl.Вместо этого используется ItemsSource.
как я могу добавить новую строку во время выполнения?
Ответ №1:
Вы не можете изменять элементы в Items
коллекции, если вы предоставили ее как ItemsSource
. Вы должны либо добавить элемент в свое list
(с INotifyCollectionChanged
реализованным), либо вы должны изначально заполнить Items
свойство с помощью Add
метода.
Описание ошибки довольно четкое, не так ли?
Комментарии:
1. Обратите внимание, что в большинстве случаев лучший способ получить
INotifyCollectionChanged
— использовать `ObservableCollection;.
Ответ №2:
попробуйте сделать что-то вроде этого: var row = DataGrid.newRow();
dataGrid.Rows.Add(row);
row["column1"] = "data1";
row["column2"] = "data2";
row["column3"] = "data3";
InitializeComponent();
Комментарии:
1. Вы действительно предлагаете взаимодействовать с
dataGrid
перед вызовомInitializeComponent
?