Linq-to-SQL: привязка ListView - PullRequest
1 голос
/ 29 июня 2009

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

У меня есть 2 таблицы базы данных: Customer с и Product с. Для каждого Customer есть список Product s.

В моей первой попытке я связываюсь с сгенерированным кодом Linq-to-SQL. Это означает, что я немедленно связываюсь с Customer.Products. Но так как это тип System.Data.Linq.EntitySet<Product>, я не получаю уведомления, когда элементы добавляются / удаляются из базы данных.

Таким образом, я расширил сгенерированный код, добавив метод к Customer, который упаковывает возвращенные System.Data.Linq.EntitySet<Product> в ObservableCollection (как советуют различные блоги)

public ObservableCollection<Product> ObservableProducts
{
    get
    {
        return new ObservableCollection<Product>(Products);
    }
}

Но теперь я не могу ничего добавить в коллекцию. Когда я звоню ObservableProducts.Add() ничего не добавляется ..

1 Ответ

2 голосов
/ 29 июня 2009

ObservableCollection - это , а не представление базовой коллекции - это отдельная коллекция. Когда вы передаете List в ObservableCollection, элементы в List копируются в ObservableCollection.

То есть ваш элемент добавляется , но только к ObservableCollection, а не к базовому List, который вы ему передали.

Варианты для продвижения вперед включают в себя:

  • Использование ObservableCollection в вашем слое данных. Преобразуйте список сущностей в ObservableCollection сразу и используйте его во всем приложении.
  • Прослушивание изменений в ObservableCollection и применение этих изменений к базовому List.
  • Напишите реализацию INotifyCollectionChanged, которая является представлением базовой коллекции. Это может работать только в одну сторону (OC-> List, но не List-> OC) и становится сложным, если у вас многопоточное приложение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...