Предполагается ли, что ViewModelLocator удаляет необходимость в DataTemplate? - PullRequest
2 голосов
/ 14 марта 2011

Я уверен, что мне не хватает чего-то простого (все еще немного зеленого в этом материале mvvm), но я подумал, что использование ViewModelLocator избавило от необходимости привязки представления DataTemplate к viewmodel. Но мне почему-то это все еще нужно.

В приложении WPF у меня есть окно, единственным содержимым которого является шаблон содержимого, который привязывается к привязке по умолчанию.

<Window ... DataContext="{Binding MainView, Source={StaticResource Locator}}">
<grid><ContentControl Content="{Binding}"/></grid>

У меня тогда есть UserControl, который, я думаю, вы могли бы назвать реальным представлением - viewmodel.

<UserControl ...
DataContext="{Binding MainView, Source={StaticResource Locator}}">
...xaml...
</UserControl>

Что я заметил, так это то, что если я не помещу DataTemplate, который связывает view - viewmodel (в данном случае MainView) в App.xaml, я просто получу имя класса.

Поскольку текстовый текст окна связан с помощью локатора, я подумал, что это сработает. Я предполагаю, что дополнительный слой в окне, использующий ContentControl, сбивает с толку.

Если я заменю ContentControl с прямой ссылкой на представление, т. Е.

<view:MainView />

Это тоже работает. Итак, я думаю, у меня есть два вопроса: 1. Почему переплет не понимает этого? 2. Есть ли способ заставить это работать, используя локатор? Я хотел бы иметь окно с минимальным пользовательским интерфейсом и сохранить объем в UserControls.

Спасибо за любую информацию.

Карымский

1 Ответ

1 голос
/ 14 марта 2011

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

ViewModelLocator не имеет ничего с DataTemplates, он просто находит для вас подходящую модель представления на основеимя или как вы хотите.Это способ отделить логику создания / размещения моделей представлений и поместить их в одном месте.

...