Привязка данных WPF, CollectionViewSource, INotifyPropertyChanged

Первый раз, когда я пытался что-то сделать в WPF, я был озадачен WPF DataBinding. Затем я внимательно изучил следующий пример в MSDN: http://msdn.microsoft.com/en-us/library/ms771319(v=VS.90).aspx

Теперь я вполне понимаю, как использовать парадигму Master-Detail для формы, которая берет данные из одного источника (одной таблицы) - как для основной части, так и для детализированной. Я имею в виду, например, у меня есть сетка с данными, а под сеткой у меня есть несколько полей с подробными данными текущей строки.

Но как это сделать, если подробные данные поступают из разных, но связанных таблиц? например: у вас есть таблица «Пользователи» со столбцами «id» и «Имя». У вас также есть другая таблица «Изображения» с такими столбцами, как «id», «Filename», «UserId». И теперь, используя парадигму master-detail, вам нужно построить форму. И каждый раз, когда вы выбираете строку в Master, вы должны получить все связанные изображения в Details.

Как правильно это сделать? Не могли бы вы показать мне пример?


person iLemming    schedule 11.03.2010    source источник


Ответы (1)


Я не уверен, как вы получаете доступ к своим таблицам. Но мне нравится использовать Entity Framework. Похоже, у вас есть отношение внешнего ключа в таблице «изображения», указывающее на ваш первичный ключ «Пользователь».

Использование Entity Framework 4 и .Net 4 (оба в RC в то время, когда я пишу это) работает довольно гладко. Вы просто создаете модель на основе вашей текущей базы данных. Это в значительной степени сопоставляет все ваши записи базы данных с классами для вас. Каждая из ваших таблиц будет коллекцией в вашей модели (которую я буду называть контекстом), поэтому вы можете получить к ним доступ следующим образом:

context.Users и context.Pictures

context.Users будет автоматически иметь «свойство навигации» под названием Pictures, которое просто представляет собой набор определенных изображений, внешние ключи которых указывают на этого пользователя.

поэтому вы привязываете свою основную «сетку» к context.Users для отображения любой информации о пользователе, которая вам нравится. Затем в разделе сведений вы можете привязать свой подробный «список» к: (grid.selectedRow as User).Pictures

Вышеприведенное — это просто псевдокод в надежде, что он поможет вам начать работу в правильном направлении.

Если вы не хотите использовать Entity Framework, если бы вы могли предоставить дополнительную информацию о том, как вы получаете доступ к информации из своей базы данных, я мог бы предоставить более конкретный пример того, как привязать данные к вашему основному подробному сценарию.

person Scott    schedule 11.03.2010