Где я должен определить свои таблицы данных? - PullRequest
10 голосов
/ 04 марта 2012

Я пытаюсь найти наилучший способ соединения моих Views и ViewModel в MVVM, и я остановился на подходе ViewModel-first, используя typed DataTemplates, как описано в этой статье и в этот ответ . Я использую Prism и имею несколько модулей, которые имеют свои собственные проекты / библиотеки классов.

Мой вопрос: Где должны находиться мои шаблоны данных в моем решении?

  1. Должен ли я поместить шаблоны данных в словарь ресурсов, который находится в том же проекте, который имеет типы / ViewModels, которые он отображает?
  2. Должен ли я поместить DataTemplates в словарь ресурсов, который находится в проекте, который имеет MainWindow приложения (т.е. Shell.xaml)?
  3. Должны ли эти ресурсные словари быть добавлены в App.Current.MainWindow.Resources.MergedDictionaries?

Надеюсь, этого достаточно, чтобы описать, что я пытаюсь сделать.

Обновление: см. Комментарии выбранного ответа.

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

Я уверен, что лучший способ - использовать файл ресурсов Themes \ Generic.xaml. Это файл (он должен находиться точно в папке «Темы» и имеет имя точно Generic.xaml), используемый механизмом тем WPF / Silverlight и содержащий ресурсы, общие для всего приложения. Вы также можете создать отдельный файл в папке Темы с именем вроде Generic.DataTemplates.xaml и добавить ссылку на него из Generic.xaml. Google много знает о generic.xaml, или вы можете увидеть более подробную информацию в моем ответе здесь: WPF Prism - Где разместить ресурсы?

2 голосов
/ 04 марта 2012

Обновлено, чтобы объяснить более понятно.

Я скажу, является ли ваш DataTemplate универсальным: Т.е. у вас есть UserControl, который привязывается к ViewModel, и у этого ViewModel есть BaseViewModel, который предоставляет какие-то свойства. Ваш DataTemplate отображает эти свойства. Таким образом, вы можете использовать этот DataTemplate в каждом ViewModel, который реализует BaseViewModel.

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

Но если ваш DataTemplate очень специфичен,

т. Е. Существует UserControl, который связывается только с указанным свойством в этой ViewModel, и вы знаете, что никакой другой элемент управления не будет привязываться к этой ViewModel, вы захотите поместить в тот же файл Xaml файл Resources или место, где вы определяете свой UserControl.

0 голосов
/ 01 марта 2015

Согласно Microsofts App Studio, DataTemplates должны находиться в подкаталоге DataTemplates в каталоге Views.Универсальное приложение имеет этот каталог как для пользовательского интерфейса Windows, так и для пользовательского интерфейса Windows Phone, поэтому его нет в общем проекте, поскольку они не совпадают.Не используйте архитектуру Converge PRISM.Это совершенно неправильно разработан!Это было написано не с учетом архитектуры Windows и Windows Phone, а как они называют это Конвергенция.Он должен был быть полностью переработан, как будто он работает в Microsoft Studio.Не ищите Dependency Injection, не в этом и не нужно.Большинство используют Dependency Injection для заглушек или фальшивых интерфейсов.DataContext для проектных данных теперь работает так хорошо с данными JSON, что компонент внедрения зависимостей будет излишним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...