この例外について、ここと MS フォーラムで見つけることができるすべての Q&A を読み、理解したほとんどの提案と他のいくつかの提案を試しました。この例外は、さまざまな原因で発生する可能性があるようです。
他の場合と同様に、コレクションにバインドされた WPF DataGrid があり、セルの 1 つを編集しようとするとこの例外がスローされます。それらは書き込み可能に設定され、コレクションは 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>
編集中の列は、読み取り専用ではない 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)
等...