ObservableList ReadOny Datagrid - PullRequest
       9

ObservableList ReadOny Datagrid

2 голосов
/ 25 ноября 2011

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

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, тогда, когда я добавляю строку в сетку данных через графический интерфейс, тогда не возникает исключение throw, но я вижу, что объект был добавлен в коллекцию, несмотря на переопределение очевидные методы, которые позволяют добавлять.

Если я попытаюсь добавить код, как и ожидалось, исключение выдается.

Любая помощь?

Привет

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Вы не переопределили функции, просто переопределили их.Вам нужно использовать override, а не new.Сетка, вероятно, преобразует источник данных в ICollection, что означает, что ваши функции не будут вызываться.Они будут использоваться только в том случае, если объект относится именно к вашему типу.

Как уже упоминалось в комментариях Add и Insert не являются виртуальными, вместо них используется функция переопределения InsertItem(Добавить и вставить оба вызывают эту функцию внутри)

0 голосов
/ 25 ноября 2011

Вы объявили свой метод добавления следующим образом:

public new void Add

Вы следите за версией базового класса. Скорее всего в DataGrid используется метод Add базового класса.

Если вы объявляете список, к которому ваша сетка будет привязана как

ObservableCollection<T> Src = new WeirdList...

Затем измените его на

WeirdList<T> Src = new WeirdList...

Поскольку метод Add в ObservableCollection<T> не объявлен как виртуальный, и поэтому не может быть переопределен.

Если это не сработает, то это будет означать, что сетка забрасывает вашу коллекцию, тем самым устраняя всю вашу тяжелую работу, делая невозможным то, что вы хотите сделать.

...