我有一个DataGrid
我正在填充来自ObservableCollection<ObservableCollection<T>>
的信息,其中T是我的一个实现IEditableObject
的对象。
我DataGrid
正确地填写了我需要的信息。问题是当我去编辑一个盒子时,我得到一个例外。
System.InvalidOperationException: 'EditItem' is not allowed for this view
后跟随后的堆栈跟踪。
我理解绑定以及在ObservableCollection<T>
中如果您希望能够编辑DataGrid
项而不是在对象中实现IEditableObject
接口所需的项目的想法{ {1}}。
我不确定为什么它不会让我编辑,虽然我更倾向于我需要将我的对象附加到某种类型的视图。
我没有找到我想要做的事情,但我已经相当成功,直到克服障碍。如果有人对我应该做什么有任何见解,我们非常感激。
此外,如果有人愿意看到它,我会发布代码,但我相信它不是关于我已经写过的内容,而是更多关于我还需要写的内容。
编辑:添加了代码
T
此处,我将列绑定到private void dg_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
DataGrid grid = sender as DataGrid;
grid.Columns.Clear();
TableNode node = e.NewValue as TableNode;
if (node != null)
{
InfoTable dti = new InfoTable(m_model.EditNode.Database.Path, node.FullName);
int index = 0;
foreach (string colName in dti.Columns)
{
DataGridTextColumn col = new DataGridTextColumn();
col.Header = colName;
col.Binding = new Binding("[" + index + "].Info");
//Note: .Info is the information string in the class T containing the data that may or may not be edited
grid.Columns.Add(col);
index++;
}
grid.ItemsSource = dti;
}
}
中ObservableCollection
中的每个ObservableCollection<ObservableCollections<T>>
。我已在InfoTable
中实施了IEnumerable
和INotfiyPropertyChange
。
答案 0 :(得分:1)
我非常确定您的InfoTable
课程也需要实施IList
,以支持DataGrid编辑。
IList
添加了添加和删除项目的功能,DataGrid可能需要它来管理其行。