带有 DataTemplate 的 ContentControl 不显示任何内容(WPF MVVM)

ContentControl with DataTemplate is not displaying anything (WPF MVVM)

在我的 MainView 中,有一个包含 ContentControl 的框架,该框架应该根据 MainViewModel 中设置的 ViewModel 显示视图。
但是,我的 MainView 上没有显示任何内容。知道为什么吗?

主视图

<Grid>
    <Frame HorizontalAlignment="Center">
        <Frame.Content>
            <ContentControl Content="{Binding TestViewContext}">
                <ContentControl.Resources>
                    <DataTemplate DataType="{x:Type local:TestViewModel}">
                        <local:TestView />
                    </DataTemplate>
                </ContentControl.Resources>
            </ContentControl>
        </Frame.Content>
    </Frame>
</Grid>

MainViewModel

public class MainViewModel : BaseViewModel
{
    private TestViewModel _testViewContext;
    public TestViewModel TestViewContext
    {
        get { return _testViewContext; }
        set { _testViewContext = value; OnPropertyChanged(nameof(TestViewContext)); }
    }

    public MainViewModel()
    {
        TestViewContext = new TestViewModel();
    }
}

测试视图
只是一个红色页面

TestViewModel

public class TestViewModel : ViewModelBase
{}

Frame有点特殊。通常,子控件继承其父控件的 DataContext。但是,对于 Frame,子代不会继承 DataContext。因此,您的 ContentControlDataContextnull

要验证这一点,请为您的 ContentControl 命名,如下所示:

<ContentControl x:Name="MyContentControl" Content="{Binding TestViewContext}">

然后在你的MainView的构造函数中,检查DataContext如下:

public MainView()
{
    // Other code

    // Set a breakpoint here and view the DataContext
    var dataContext = MyContentControl.DataContext;
}

如需进一步阅读,您可以阅读以下内容post: page.DataContext not inherited from parent Frame?

此外,作为旁注,Frame 预期用途是将 Source 属性 设置为外部文件。您可能已经注意到,与其他控件不同,为了在 xaml 中设置子内容,您需要指定 <Frame.Content>