Как я могу отобразить мой пользовательский элемент управления в MainWindow?
Я пытаюсь создать небольшое тестовое приложение MVVM, но не могу понять, как отображать мой пользовательский элемент управления в MainWindow.
Мой обозреватель решений:
![How my solution looks like]()
У меня есть ресурсный словарь:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MVVM.ViewModel"
xmlns:vw="clr-namespace:MVVM.View">
<DataTemplate DataType="{x:Type vm:ViewModel}">
<vw:View />
</DataTemplate>
</ResourceDictionary>
Я получил свое мнение:
<UserControl x:Class="MVVM.View.View"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<DataTemplate x:Key="PersonTemplate">
<StackPanel>
<TextBlock Text="{Binding FirstName}" />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<ListBox ItemsSource="{Binding Path=Persons}"
ItemTemplate="{StaticResource PersonTemplate}" />
</UserControl>
и My MainWindow
<Window x:Class="MVVM.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:MVVM.ViewModel"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary Source="MainWindowResources.xaml" />
</Window.Resources>
<Grid>
</Grid>
</Window>
Ответы
Ответ 1
Самый очевидный и самый простой способ - добавить элемент ContentControl
:
<Grid>
<ContentControl x:Name="mainContentControl" />
</Grid>
И после этого установите свойство Content
этого элемента управления в вашу модель просмотра, и соответствующее представление будет загружено и применено автоматически:
this.mainContentControl.Content = new ViewModel.ViewModel();
Но я бы предпочел использовать другой способ без datatemplates:
<Grid>
<vw:View x:Name="mainView"/>
</Grid>
this.mainView.DataContext = new ViewModel.ViewModel();
Ответ 2
Постройте решение VS2010, затем перейдите в свой основной файл XWW.
Слева находится панель инструментов с кнопкой "Панель инструментов"
Откройте его, он содержит все возможные элементы управления WPF, которые вы могли бы добавить в свой интерфейс пользователя
Ваш UserControl должен появиться поверх списка (в категории, вероятно, названной "MVVM Controls" ), просто перетащите ее и перетащите ее в свой интерфейс:)