【问题标题】:Wrapped ObservableCollection<T> throwing `'EditItem' is not allowed for this view` when bound to a WPF DataGrid绑定到 WPF DataGrid 时,此视图不允许包装的 ObservableCollection<T> 抛出“EditItem”
【发布时间】:2011-09-13 04:20:15
【问题描述】:

我创建了一个包装器来扩展 ObservableCollection&lt;T&gt;

[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&lt;TModel&gt; 替换为常规ObservableCollection&lt;T&gt; 时,不会引发异常。

我的意图是允许对单元格进行编辑。我的包装器上是否缺少接口?

【问题讨论】:

    标签: c# wpf wpfdatagrid observablecollection


    【解决方案1】:

    我可以通过显式实现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
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 2011-10-20
      • 2013-11-30
      • 2011-03-01
      • 2017-02-08
      • 2013-10-20
      • 2018-03-25
      • 2012-01-30
      相关资源
      最近更新 更多