Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可观察列表ReadOny数据网格_C#_Wpf_Datagrid_Observablecollection_Readonly - Fatal编程技术网

C# 可观察列表ReadOny数据网格

C# 可观察列表ReadOny数据网格,c#,wpf,datagrid,observablecollection,readonly,C#,Wpf,Datagrid,Observablecollection,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

我创建了可观察列表的以下扩展,以模拟只读行为

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.");
    }

}
公共类古怪列表:ObservableCollection
{
新增公共作废(T项)
{
抛出新的NotImplementedException(“添加未实现的函数”);
}
公共新空白插入(整数索引,T项)
{
抛出新的NotImplementedException(“Insert()未实现”);
}
}
但是,如果我将其绑定到一个具有CanUserAddRows=true的datagrid,那么当我通过GUI在datagrid上添加一行时,不会抛出异常,尽管覆盖了允许添加的明显方法,但我仍然可以看到该对象已添加到集合中

如果我尝试添加代码,则会引发异常

有什么帮助吗


关于

您声明了如下添加方法:

公共新作废添加

您正在跟踪基类的版本。DataGrid可能使用基类的
Add
方法

如果您正在声明网格将bing作为

observateCollection Src=新古怪列表…

然后把它改成

WeirdList Src=新的古怪列表…

由于
ObservableCollection
中的
Add
方法未声明为虚拟,因此无法重写


如果这不起作用,那么这将意味着网格正在铸造你的收藏,从而省去了你所有的辛苦工作,使你想做的事情变得不可能

您没有重写函数,只是重新定义了它们。您需要使用
覆盖
而不是
新建
。网格可能将数据源强制转换为
i集合
,这意味着不会调用您的函数。只有当对象正是您的类型时,才会使用它们


如注释
Add
Insert
中所述,它们不是虚拟的,而是重写函数
InsertItem
。(Add和insert都在内部调用此函数)

Add未声明为虚拟:尝试为InsertItem添加覆盖,但没有效果。如果覆盖insert item并向集合添加一个项(不使用网格),它是否会引发异常?啊哈,我没有正确覆盖insert item。它正在工作!我在我的古怪集合中添加了其他函数,其中一些事件似乎被称为“好”。我不明白datagrid如何可以强制转换为ICollection,但我的其他函数/事件仍处于工作状态。您成功更改的其他方法是否在ObservableCollection中声明为virtual??