Wrapped ObservableCollection <T>, выбрасывающий «EditItem», не разрешен для этого представления »при привязке к WPF DataGrid - PullRequest
1 голос
/ 12 июня 2011

Я создал оболочку для расширения ObservableCollection<T>

[Serializable]
public abstract class ModelCollection<TModel> : ModelCollectionBase,
    IList<TModel>, INotifyCollectionChanged, INotifyPropertyChanged
    where TModel : ModelBase<TModel>
{
    private ObservableCollection<TModel> wrappedCollection = new ObservableCollection<TModel>();

    // wrapper implementation goes here
}

Я думал, что все работает нормально, пока не попытался привязать элементы из списка к DataGrid.

<DataGrid ItemsSource="{Binding /Orders}" AutoGenerateColumns="False">
    <DataGrid.Columns>
    <DataGridTextColumn Header="Order Id" Binding="{Binding OrderId}" />
        <DataGridTextColumn Header="Date Time" Width="125" Binding="{Binding DateTime}" />
        <DataGridTextColumn Header="Notes" Width="125" Binding="{Binding Notes}" />
        <DataGridTextColumn Header="Cost" Width="75" Binding="{Binding Cost}" />
    </DataGrid.Columns>
</DataGrid>

Предметы появляются в сетке, но двойной щелчок по ячейке выдает 'EditItem' is not allowed for this view.

Исключение не выдается, когда я заменяю ModelCollection<TModel> обычным ObservableCollection<T>.

Мое намерение - разрешить редактирование ячеек. Мне не хватает интерфейса в моей оболочке?

1 Ответ

4 голосов
/ 12 июня 2011

Мне удалось это исправить, явно реализовав IList

[Serializable]
public abstract class ModelCollection<TModel> : ModelCollectionBase,
    IList<TModel>, IList, INotifyCollectionChanged, INotifyPropertyChanged
    where TModel : ModelBase<TModel>
{
    private ObservableCollection<TModel> wrappedCollection = new ObservableCollection<TModel>();

    // wrapper implementation goes here
}
...