Как я могу отобразить свой пользовательский элемент управления в главном окне? - PullRequest
11 голосов
/ 29 марта 2011

Я пытаюсь создать небольшое тестовое приложение MVVM, но не могу понять, как отобразить мой пользовательский элемент управления в MainWindow.

My Solution Explorer:

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>

Ответы [ 2 ]

10 голосов
/ 29 марта 2011

Самый очевидный и самый простой способ - добавить элемент ContentControl:

<Grid>
    <ContentControl x:Name="mainContentControl" />
</Grid>

И после этого установить свойство Content этого элемента управления для вашей модели вида, и соответствующий вид будетзагружается и применяется автоматически:

this.mainContentControl.Content = new ViewModel.ViewModel();

Но я бы предпочел использовать другой способ без шаблонов данных:

<Grid>
    <vw:View x:Name="mainView"/>
</Grid>
this.mainView.DataContext = new ViewModel.ViewModel();
5 голосов
/ 29 марта 2011

Создайте решение VS2010, затем перейдите к XAML вашего главного окна.

Слева находится панель инструментов с кнопкой "Панель инструментов"

Откройте его, он содержит все возможные элементы управления WPF, которые вы можете добавить в свой пользовательский интерфейс

Ваш UserControl должен появиться в верхней части списка (в категории, которая, вероятно, называется "MVVM Controls"), просто перетащите его в свой пользовательский интерфейс:)

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