![](/img/trans.png)
[英]WPF / MVVM : Need help to fix a broken binding with ContentControl + DataTemplate
[英]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
。 因此,您的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 不是從父框架繼承的?
此外,作為旁注, Frame
預期用途是將Source
屬性設置為外部文件。 您可能已經注意到,為了在 xaml 中設置子內容,與其他控件不同,您需要指定<Frame.Content>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.