WPF DataGrid 编辑困难(InvalidOperationException)
WPF DataGrid Editing Difficulty (InvalidOperationException)
我有一个 DataGrid
,我正在填充来自 ObservableCollection<ObservableCollection<T>>
的信息,其中 T 是我实现 IEditableObject
的对象。
我 DataGrid
正确填写了我需要的信息。问题是当我去编辑其中的一个框时出现异常。
System.InvalidOperationException: 'EditItem' is not allowed for this view
随后是后续堆栈跟踪。
我了解绑定以及在 ObservableCollection<T>
中的想法,如果您希望能够编辑 DataGrid
项,那么您需要在 IEditableObject
中实现接口对象 T
.
我不确定为什么它不允许我编辑,虽然我更倾向于我需要将我的对象附加到某种类型的视图的想法。
我没有找到太多关于我正在尝试做的事情,但到目前为止我已经相当成功地克服了障碍。如果有人对我应该做什么有任何见解,我们将不胜感激。
另外,如果有人真的想看的话,我会 post 编写代码,但我相信这不是关于我已经写的东西,而是关于我还需要写的东西。
编辑:添加代码
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;
}
}
在这里,我将列绑定到我的 InfoTable
中的 ObservableCollection<ObservableCollections<T>>
中的每个 ObservableCollection
。我在 InfoTable
.
中实现了 IEnumerable
和 INotfiyPropertyChange
我很确定您的 InfoTable
class 也需要实施 IList
,以支持 DataGrid 编辑。
IList
添加了添加和删除项目的功能,DataGrid 可能需要它来管理其行。
我有一个 DataGrid
,我正在填充来自 ObservableCollection<ObservableCollection<T>>
的信息,其中 T 是我实现 IEditableObject
的对象。
我 DataGrid
正确填写了我需要的信息。问题是当我去编辑其中的一个框时出现异常。
System.InvalidOperationException: 'EditItem' is not allowed for this view
随后是后续堆栈跟踪。
我了解绑定以及在 ObservableCollection<T>
中的想法,如果您希望能够编辑 DataGrid
项,那么您需要在 IEditableObject
中实现接口对象 T
.
我不确定为什么它不允许我编辑,虽然我更倾向于我需要将我的对象附加到某种类型的视图的想法。
我没有找到太多关于我正在尝试做的事情,但到目前为止我已经相当成功地克服了障碍。如果有人对我应该做什么有任何见解,我们将不胜感激。
另外,如果有人真的想看的话,我会 post 编写代码,但我相信这不是关于我已经写的东西,而是关于我还需要写的东西。
编辑:添加代码
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;
}
}
在这里,我将列绑定到我的 InfoTable
中的 ObservableCollection<ObservableCollections<T>>
中的每个 ObservableCollection
。我在 InfoTable
.
IEnumerable
和 INotfiyPropertyChange
我很确定您的 InfoTable
class 也需要实施 IList
,以支持 DataGrid 编辑。
IList
添加了添加和删除项目的功能,DataGrid 可能需要它来管理其行。