Связывание View с ViewModel с использованием DataTemplate для приложения WPF с использованием шаблона MVVM - PullRequest
3 голосов
/ 22 июля 2011

В настоящее время у меня есть некоторые виды, связанные с ViewModels с использованием кода, подобного следующему:

<Application.Resources>
        <DataTemplate DataType="{ x:Type vm:AgeIndicatorViewModel}">
        <v:AgeIndicatorView />
    </DataTemplate>
</Application.Resources>

У меня есть два вопроса по этому поводу:

  • Этот метод позволяетя должен связать только один вид с каждой моделью представления (я думаю, что это накладывает на меня это ограничение, но хочу быть уверенным)

  • При использовании этого метода, куда я должен поместить всемои объявления DataTemplate?На данный момент их всего несколько, и все они в App.Xaml - есть ли лучшее место для них или App.Xaml хорошо / Лучшее местоположение?

Наиболеена самом деле важен второй вопрос, так как на данный момент я хочу связать мою ViewModel с моим View таким образом, поскольку это не требует внешних библиотек и т. д.

Способ настройки моих ViewModelsс их свойствами, командами и т. д. все уже работает.

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Указание неявного DataTemplate, как вы делаете в своем вопросе, действительно связывает вашу View-Model с одним View.Вы можете переопределить это на любом уровне управления, поэтому у вас может быть:

<Window.Resources>
    <DataTemplate DataType="{x:Type vm:AgeIndicatorViewModel}">
        <v:AgeIndicatorView2 />
    </DataTemplate>
</Window.Resources>

Это изменит представление, примененное к модели представления для данного окна.Это можно сделать на любом элементе управления на любом уровне.

Преимущество выполнения этого на уровне приложения состоит в том, что оно применяется ко всем окнам в вашем приложении.Хотя мой приведенный выше пример будет применен только к одному окну.

В общем, ресурсы приложения - лучшее место для их определения.Поскольку, если у вас несколько окон (то есть Window1 и Window2), то ваша модель представления всегда будет использовать неявный DataTemplate.

2 голосов
/ 22 июля 2011

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

Да.Если вы пытаетесь связать несколько моделей ViewModel с несколькими представлениями, вам необходимо инкапсулировать их в отдельную виртуальную машину и добавить новый шаблон данных.

При использовании этого метода я должен поместить все своиОбъявления DataTemplate?На данный момент их всего несколько, и все они в App.Xaml. Есть ли лучшее расположение для них или App.Xaml хорошо / Лучшее местоположение?

App.Xaml нормальноили в любом другом месте визуальной иерархии выше, где будет использоваться DataTemplate.

При этом, если проект становится очень масштабным, зачастую лучше начать использовать Объединенный ресурсСловари - это позволяет вам устанавливать словари ресурсов «рядом», где вы определяете пары View / ViewModel, но затем использовать их на более высоком уровне (т. Е. Объединять их с App.Xaml).

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