我在 SO 上搜索了很多,但没有找到我的问题的答案。 我想将 TabControl 与 MVVM 一起使用。以下是我将 TabControl 添加到 MainWindow.xaml 的方法
<Window.Resources>
<DataTemplate DataType="{x:Type models:PartnersViewModel}">
<views:PartnersView />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ProjectsViewModel}">
<views:ProjectsView />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<models:ApplicationViewModel/>
</Window.DataContext>
<TabControl ItemsSource="{Binding PageViewModels}" TabStripPlacement="Left">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
PageViewModels 是 ObservableCollection<IPageViewModel>
.
IPageViewModel
是具有一个属性的简单界面 Name
.此接口(interface)有 2 个实现 PartnersViewModel
和 ProjectsViewModel
.
public class ProjectsViewModel : IPageViewModel
{
public String Name
{
get { return "Projects"; }
}
}
public class PartnersViewModel : IPageViewModel
{
public String Name
{
get { return "Partners"; }
}
}
我希望每个选项卡都显示为 ContentControl。标题文本取自 Name 属性。我的 ProjectsView 和 PartnersView 如下所示:
<UserControl x:Class="WANIRPartners.Views.ProjectsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" >
<Grid>
<Label Content="Projects Content" />
</Grid>
</UserControl>
在 TabControl
中使用此代码、标题和内容是完全一样的。 “项目内容”/“合作伙伴内容”显示在选项卡标题中,并且(这没关系)显示在选项卡内容中。当我改变 <Label/>
至 <DataGrid/>
选项卡标题包含数据网格(原文如此!)。
我怎样才能让它正常工作。我的意思是如何将标题显示为属性值 Name
和正确呈现的选项卡内容 <views:PartnersView />
或 <views:ProjectsView />
取决于 PageViewModels
中的内容.
最佳答案
你的代码应该可以工作,没有 IDE atm。您还可以使用 Snoop 在运行时检查您的绑定(bind)。我将 ContentTemplate 更改为:
<TabControl.ContentTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding .}" />
</DataTemplate>
</TabControl.ContentTemplate>
并且有效。但即使是您的代码也能在我的测试应用程序中运行。
关于c# - WPF TabControl 与 ContentControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29727860/