如何在MainWindow中显示我的用户控件?

时间:2011-03-29 11:47:16

标签: wpf binding user-controls

我正在尝试构建一个小型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>

和我的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 个答案:

答案 0 :(得分:10)

最明显和最简单的方法是添加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();

答案 1 :(得分:5)

构建您的VS2010解决方案,然后转到您的MainWindow的XAML。

在左侧,有一个工具栏,其中包含“工具箱”按钮

打开它,它包含您可以添加到UI的所有可能的WPF控件

您的UserControl应该出现在列表的顶部(在一个可能名为“MVVM Controls”的类别中),只需将其拖放到您的UI中即可:)