我已经阅读了我可以在此处和 MS 论坛上找到的有关此异常的所有问答,并尝试了我理解的大多数建议以及其他一些建议。似乎这个例外可能是由多种原因引起的。
与其他人一样,我有一个 WPF DataGrid 绑定到一个集合,当尝试编辑其中一个单元格时会引发此异常。它们被设置为可写,集合是 ObservableCollection,我已经实现了发送通知消息的 get 和 set 处理程序。
我没有尝试过的建议是那些涉及实现 IList 的非通用接口的建议,因为我不知道我会做什么。此外,我有许多 DataGrids 绑定到我的应用程序中的各种列表和集合,它们可以工作,而这个曾经在绑定到 LINQ 集合时工作。
请帮我弄清楚我需要在这里做什么。
数据网格是:
<DataGrid Name="dgIngredients" Margin="567,32,0,44" Width="360" ItemsSource="{Binding}" IsReadOnly="False"
AutoGenerateColumns="False" HorizontalAlignment="Left" CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTextColumn Width="63" Header="Percent" Binding="{Binding Preference}" IsReadOnly="False" />
<DataGridTextColumn SortDirection="Descending" Width="301" Header="Ingredient" Binding="{Binding Ingredient}" IsReadOnly="True" CanUserSort="True" CanUserReorder="False" />
</DataGrid.Columns>
</DataGrid>
正在编辑的列是非只读列,Preference。
该系列是:
private ObservableCollection<RAM_Ingredient> MemberIngredientPrefs = new ObservableCollection<RAM_Ingredient>();
绑定是:
dgIngredients.DataContext = MemberIngredientPrefs.OrderBy("Ingredient",true);
RAM_Ingredient 是:
public class RAM_Ingredient : INotifyPropertyChanged
等等
RAM_Ingredient.Preference 是:
private int _Preference;
public int Preference
{
get
{
return _Preference;
}
set
{
// This is needed to send notification of changes (and to not throw an exception on grid edit!):
if ((_Preference != value))
{
SendPropertyChanging();
_Preference = value;
SendPropertyChanged("Preference");
}
}
}
例外是:
System.InvalidOperationException was unhandled
Message='EditItem' is not allowed for this view.
Source=PresentationFramework
StackTrace:
at System.Windows.Controls.ItemCollection.System.ComponentModel.IEditableCollectionView.EditItem(Object item)
at System.Windows.Controls.DataGrid.EditRowItem(Object rowItem)
at System.Windows.Controls.DataGrid.OnExecutedBeginEdit(ExecutedRoutedEventArgs e)
ETC...