簡體   English   中英

帶有 DataTemplate 的 ContentControl 不顯示任何內容(WPF MVVM)

[英]ContentControl with DataTemplate is not displaying anything (WPF MVVM)

在我的 MainView 中,有一個包含 ContentControl 的 Frame 應該根據 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>

主視圖模型

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

    public MainViewModel()
    {
        TestViewContext = new 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;
}

如需進一步閱讀,您可以閱讀以下帖子: page.DataContext 不是從父框架繼承的?

此外,作為旁注, Frame預期用途是將Source屬性設置為外部文件。 您可能已經注意到,為了在 xaml 中設置子內容,與其他控件不同,您需要指定<Frame.Content>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM