我已阅读所有的Q&A,我可以在这里找到,并在有关此异常的MS论坛,并试图大部分我理解的建议,和其他几个人。 看来,这个异常可以拿出来大范围的原因。
至于其他,我有绑定到一个集合,当一个人试图编辑的一个细胞会抛出这个异常的WPF的DataGrid。 它们被设置为可写的,收藏是一个ObservableCollection,我实现了get和set其发送通知消息处理程序。
我还没有尝试过的建议是涉及实施的IList的非通用接口,因为我不知道我会做什么做到这一点的人。 另外,我有一个绑定到不同的列表和集合在我的应用程序,它的工作很多DataGrid中,而这一次使用时,它被绑定到一个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>
被编辑的列是非只读一个,偏好。
集合是:
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)
等等...