无法在窗口

时间:2017-09-04 23:25:11

标签: c# .net wpf xaml mvvm

我想我在这里缺少一些简单的东西。

这就是我想要的: 我想创建一个MainWindowViewModel实例mwVM。 我想将此实例与MainWindow相关联。

我想将视图实例与mwVM的viewModel1成员相关联。 因此,我实际上想要在View中从viewModel传递实例层次结构。到目前为止,我无法看到只是观点。

我正在尝试在WPF窗口中呈现自定义ContentControl。 当我将MainWindow.xaml作为应用程序的入口点时,我什么都看不到。但是当我将view1.xaml作为入口点(在App.xaml中)时,我可以看到文本“Hello”。我在这里失踪的是什么?

MainWindow.xaml

<Window x:Class="MimicView.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:MimicView"
    mc:Ignorable="d"
    d:DataContext="{d:DesignInstance local:MainWindowViewModel}"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <DataTemplate DataType="{x:Type local:ViewModel1}">
        <local:View1/>
    </DataTemplate>
</Window.Resources>

<Grid>
    <ContentControl Content="{Binding viewModel1}"></ContentControl>
</Grid>

MainWindowViewModel.cs

namespace MimicView {
class MainWindowViewModel {


    public MainWindowViewModel() {
        this.viewModel1 = new ViewModel1();
    }

    public ViewModel1 viewModel1 { get; set; }
}
}

View1.xaml

<UserControl x:Class="MimicView.View1"
         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"
         xmlns:local="clr-namespace:MimicView"
         mc:Ignorable="d"
         d:DesignHeight="300" d:DesignWidth="300"
         d:DataContext="{d:DesignInstance local:ViewModel1}">



<TextBox Text="Hello"/>

的App.xaml

<Application x:Class="MimicView.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:MimicView"
         StartupUri="MainWindow.xaml">
<Application.Resources>

</Application.Resources>

1 个答案:

答案 0 :(得分:1)

设置窗口的DataContext属性:

<Window x:Class="MimicView.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:MimicView"
    mc:Ignorable="d"
    d:DataContext="{d:DesignInstance local:MainWindowViewModel}"
    Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <DataTemplate DataType="{x:Type local:ViewModel1}">
            <local:View1/>
        </DataTemplate>
    </Window.Resources>

    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>

    <Grid>
        <ContentControl Content="{Binding viewModel1}"></ContentControl>
    </Grid>
</Window>

这仅设置设计时间 DataContext

d:DataContext="{d:DesignInstance local:MainWindowViewModel}"

您还应该设置实际的DataContext属性:

<Window.DataContext>
    <local:MainWindowViewModel />
</Window.DataContext>