【问题标题】:ContentControl with DataTemplate is not displaying anything (WPF MVVM)带有 DataTemplate 的 ContentControl 不显示任何内容(WPF MVVM)
【发布时间】:2021-12-15 10:00:46
【问题描述】:

在我的 MainView 中,有一个 Frame 包含一个 ContentControl,它应该根据 MainViewModel 中设置的 ViewModel 显示一个 View。
但是,我的 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
{}

【问题讨论】:

    标签: c# wpf user-interface mvvm


    【解决方案1】:

    Frame 有点特别。通常,子控件继承父控件的DataContext。但是,对于Frame,子代不会继承DataContext。因此,您的ContentControl 的DataContext 为null。

    要验证这一点,请为您的 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;
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 2022-01-11
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多