【发布时间】:2016-03-05 11:44:10
【问题描述】:
我在 TabControl 的数据模板中添加了一个内容展示器,以便显示正确的视图。
但是当我加载应用程序时,选项卡会显示,但它们没有用户控制内容。
我在 Google 上搜索了这个错误并遇到了这个 solution,这表明数据上下文存在错误,但在下面的 AppVM 和 AppView 中设置似乎没问题。
我在 AppView 中引用的 VM 和视图的名称也是正确的。
有人知道这里的设置哪里出错了吗?
这是包含两个视图的 ApplicationView:
<Window x:Class="MongoDBApp.Views.ApplicationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="clr-namespace:MongoDBApp.Views"
xmlns:vm="clr-namespace:MongoDBApp.ViewModels"
Title="ApplicationView"
Width="800"
Height="500">
<Window.Resources>
<DataTemplate DataType="{x:Type vm:CustomerDetailsViewModel}">
<views:CustomerDetailsView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:CustomerOrdersViewModel}">
<views:CustomerOrdersView />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<vm:ApplicationViewModel />
</Window.DataContext>
<TabControl ItemsSource="{Binding PageViewModels}" TabStripPlacement="Top">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding CurrentPageViewModel}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Window>
ApplicationViewModel 构造函数及相关字段:
private ICommand _changePageCommand;
private IPageViewModel _currentPageViewModel;
private List<IPageViewModel> _pageViewModels;
private static ICustomerDataService customerDataService = new CustomerDataService(CustomerRepository.Instance);
#endregion
/// <summary>
/// Initializes a new instance of the <see cref="ApplicationViewModel"/> class.
/// </summary>
public ApplicationViewModel()
{
// Add available pages
PageViewModels.Add(new CustomerDetailsViewModel(customerDataService));
PageViewModels.Add(new CustomerOrdersViewModel());
// Set starting page
CurrentPageViewModel = PageViewModels[0];
}
【问题讨论】:
-
我认为
ContentPresenter需要在ItemTemplate中,而不是ContentTemplate。试试看。 -
@MikeEason 我认为
ItemTemplate将设置 TabItem 本身的样式,而不是 Content 部分
标签: wpf mvvm datatemplate tabcontrol contentpresenter