Итак, я изучаю Linq2SQL, создав простой интерфейс. Я использую две DataGrids для отображения интерфейса типа основной / подробности, где «Клиенты» отображаются в одной сетке, а при выборе некоторые детали отображаются в другой сетке (например, записи из таблицы внешнего ключа, такие как «Заказы»). , что угодно).
Теперь каждый пример, который я прочитал относительно использования DataGrid, показывает что-то вроде этого:
using( var db = new TestDataContext() )
{
// AutoGenerateColumns set to false and
// column bindings set to certain properties
// of the Customer class.
grid.ItemsSource = db.Customers.ToList();
}
Что ж, это не работает, потому что DataContext доступен после выполнения этого кода из-за привязки данных, и, конечно, объект Context уже был удален. Хорошо, это нормально; Я могу использовать один DataContext для всех моих операций с сеткой, хотя класс DataContext был разработан для быстрого использования и удаления. Я не уверен, что хранение одного DataContext покажет меня в будущем.
Так что теперь я столкнулся с проблемой обновления базы данных и отражения этих изменений в сетке (ах). Самый простой способ, с которым я столкнулся, - установить ItemsSource
в ноль, а затем привязать его еще раз к таблице. Мне это кажется «грязным», и я должен представить, что что-то упустил. Теоретически я мог бы использовать ObservableCollection и связать его с сеткой, поддерживая ее синхронизацию с базовыми данными, но я еще не понял, как заставить сетку отображать данные из наблюдаемой коллекции (я связываю ее в XAML и в таблице отображаются только пустые строки).
TLDR:
Так или иначе, мой вопрос таков; Какие шаблоны вы, как вы знаете, использовали в LINQ2SQL для этого типа сценария? Кажется, что все примеры, которые я могу найти, являются чрезмерно упрощенными и не совсем применимы в реальном случае использования (даже один такой простой, как мой). В основном, как вы используете свой DataContext, как вы обновляете сетку при добавлении новых элементов в таблицу, и каковы некоторые общие рекомендации здесь?