ObservableList ReadOnly Datagrid

时间:2011-11-24 22:40:19

标签: c# wpf datagrid observablecollection readonly

我创建了observable列表的以下扩展来模仿readonly行为。

public class WeirdList<T> : ObservableCollection<T>
{

    public new void Add(T item)
    {
        throw new NotImplementedException("Add function not implemented.");
    }

    public new void Insert(int index, T item)
    {
        throw new NotImplementedException("Insert() not implemented.");
    }

}

但是,如果我将它绑定到具有CanUserAddRows = true的数据网格,那么当我通过GUI在数据网格上添加一行时,没有抛出任何异常但我可以看到该对象已被添加到集合中尽管已被覆盖显而易见的方法,允许添加。

如果我尝试添加代码,则会抛出异常。

任何帮助?

此致

2 个答案:

答案 0 :(得分:1)

您没有覆盖这些功能,只是重新定义了它们。您需要使用override而不是new。网格可能会将数据源强制转换为ICollection,这意味着您的函数不会被调用。只有在对象完全属于您的类型时才会使用它们。

如评论AddInsert中提到的不是虚拟的,请改写覆盖函数InsertItem。 (添加并插入两者都在内部调用此函数)

答案 1 :(得分:0)

您已经声明了这样的添加方法:

public new void Add

你是阴影基类的版本。 DataGrid可能使用基类的Add方法。

如果您要将网格声明的列表声明为

ObservableCollection<T> Src = new WeirdList...

然后将其更改为

WeirdList<T> Src = new WeirdList...

由于Add中的ObservableCollection<T>方法未声明为虚拟,因此无法覆盖。

如果这不起作用,那么这意味着网格正在投射你的收藏,从而避免你所有的努力工作,呈现你想要做的事情。