Как применить ViewModel к UserControl внутри страницы? - PullRequest
1 голос
/ 28 февраля 2010

Делаем что-то вроде этого:

<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}">
<vw:AllCustomersView />
</DataTemplate>

Работает в ResourceDictionary, когда я хочу применить ViewModel к UserControl как root, но как мне сделать то же самое, когда у меня есть UserControl внутри Page?``\ Would I create a ResourceDictionary for all my Pages then at the top of each Page` сделать что-то вроде:

<Page.Resources>
      <ResourceDictionary Source="../MainWindowResources.xaml"/>           
</Page.Resources>

Ответы [ 3 ]

0 голосов
/ 28 февраля 2010

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

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

Я согласен с Абэ. Все, что вам нужно сделать, это добавить файл Resource Dictionary в проект (например, Resources.xaml

положить

<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}">
<vw:AllCustomersView />
</DataTemplate>

внутри. И тогда в вашем App.xaml вставьте следующее:

<Application.Resources>
    <ResourceDictionary Source="Resources.xaml"/>
</Application.Resources>

Таким образом, всякий раз, когда WPF пытается выяснить, как отобразить класс (который он в настоящее время не знает, как визуализировать), он смотрит в ресурсы элементов управления, если там нет шаблона, он проверяет ресурсы контейнера элементов управления. Если его нет, он продолжает расти, пока не будет контейнера. Тогда это идет в Приложение. Ресурсы. Если он находит его, он рендерит с использованием этого шаблона. Если нет, то он просто вызывает ToString (). Поместите все свои глобальные вещи в Application.Resources, чтобы вы не повторяли себя во всем приложении, сохраняйте его СУХИМ (не повторяйте себя).

На заметку. Я обнаружил, что этот пост - самое простое решение для привязки множества ViewModels к Views без явной записи каждого из них в словарь ресурсов. Он использует IValueConverter для динамического возврата желаемого представления.

0 голосов
/ 28 февраля 2010

(Я прошу прощения за то, что не комментировал вопрос. Мой комментарий слишком длинный.)

Не могли бы вы уточнить вопрос, пожалуйста?

У вас есть UserControl, в котором есть упомянутый шаблон данныхсвои собственные ресурсы, верно?

Теперь вы хотите использовать этот элемент управления на странице, верно?

И ваш вопрос: вам нужно объявлять ресурсы для UserControl на каждой странице, котораяиспользует его?

Если только сам пользовательский элемент управления нуждается в доступе к этим ресурсам, нет, нет необходимости переопределять их в другом месте.Если вы хотите, чтобы эти ресурсы были доступны для страницы хостинга (или некоторого элемента в иерархии), ресурсы должны быть объявлены там.Если они должны быть доступны где-либо в приложении, рекомендуется объявить их на уровне приложения.

...