Неявный WPT DataTemplate, объявленный в App.xaml, не вступит в силу
В MainWindow.xaml
Я установил:
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
в App.xaml
файл, я добавил следующее:
<Application.Resources>
<DataTemplate DataType="vm:MainViewModel">
<v:MainView/>
</DataTemplate>
</Application.Resources>
Я надеялся MainWindow
автоматически загрузит и покажет MainView
с этими DataContext
свойство, установленное для окна (которое было установлено в MainViewModel
во время разработки, как указано выше), но это не сработает - MainWindow
не использует DataTemplate
установить в App.xaml
,
Есть лучшие идеи для этого сценария?
2 ответа
Вы должны внести незначительные изменения -
Сначала в вашем окне. Попробуй это:
<Window>
<!-- setup window... -->
<ContentPresenter>
<ContentPresenter.Content>
<vm:MainViewModel/>
</ContentPresenter.Content>
</ContentPresenter>
</Window>
Это создает один элемент контента в вашем окне. DataTemplates работают, отображая содержимое в новое представление - в данном случае, так как здесь содержимое MainViewModel
, он будет автоматически создавать и создавать новые MainView
для тебя. Настройка DataContext
не сработает DataTemplates
, поскольку вы никогда не делаете ViewModel "контентом" объекта.
Вы можете сократить это, просто установив содержимое окна напрямую, если вы предпочитаете:
<Window>
<Window.Content>
<vm:MainViewModel/>
</Window.Content>
</Window>
Или даже связывание Контента с DataContext
(хотя это имеет смысл, только если вам нужно DataContext
установить для какой-то другой цели):
<Window Content="{Binding}">
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
</Window>
Я думаю тебе нужно
<DataTemplate DataType="{x:Type vm:MainViewModel}">
РЕДАКТИРОВАТЬ:
Я действительно не думаю, что я не прав, код
<Window.DataContext>
<WpfApplication1:ViewModel />
</Window.DataContext>
<Window.Resources>
<DataTemplate DataType="{x:Type WpfApplication1:ViewModel}">
<TextBlock>Custom template</TextBlock>
</DataTemplate>
</Window.Resources>
<ContentPresenter Content="{Binding}" />
показывает "Пользовательский шаблон". Если я удалю x:Type
вместо этого показано "WpfApplication1.ViewModel", который является результатом вызова ToString()
на вид модель объекта. Это используется в отсутствие DataTemplate
,