C# 如何在Josh Smith的MVVM演示应用程序中找到当前/活动选项卡

C# 如何在Josh Smith的MVVM演示应用程序中找到当前/活动选项卡,c#,wpf,mvvm,tabcontrol,C#,Wpf,Mvvm,Tabcontrol,我一直在适应我的要求 我大部分时间都很成功。现在我想添加一个打印功能,类似于此应用程序的“文件”菜单项中任何应用程序中存在的打印功能。由于我可以在此应用程序中打开多个选项卡,我如何知道哪个选项卡更具体,当用户单击打印时,哪个工作区处于活动状态?下面的代码显示了在DemoApp中使用TabControl的数据模板 非常感谢您的帮助/想法 <DataTemplate x:Key="WorkspacesTemplate"> <TabControl IsSynchronizedW

我一直在适应我的要求

我大部分时间都很成功。现在我想添加一个打印功能,类似于此应用程序的“文件”菜单项中任何应用程序中存在的打印功能。由于我可以在此应用程序中打开多个选项卡,我如何知道哪个选项卡更具体,当用户单击打印时,哪个工作区处于活动状态?下面的代码显示了在DemoApp中使用TabControl的数据模板

非常感谢您的帮助/想法

<DataTemplate x:Key="WorkspacesTemplate">
<TabControl 
  IsSynchronizedWithCurrentItem="True" 
  ItemsSource="{Binding}" 
  ItemTemplate="{StaticResource ClosableTabItemTemplate}"
  Margin="4"
  />

首先,DataContext是错误的,DataContext应该是一个ViewModel,将ItemsSource绑定到一个ObservableCollection属性。例如

<TabControl 
  IsSynchronizedWithCurrentItem="True" 
  ItemsSource="{Binding Tabs}" 
  SelectedItem={Binding SelectedTab}
  ItemTemplate="{StaticResource ClosableTabItemTemplate}"
  Margin="4"
  />


@devhedgehog:不,这不是MVVM中的工作方式。MVVM没有代码隐藏,您建议的stakoverflow链接适用于通用WPF解决方案。您从哪里读到的?模型视图视图模型模式确实允许代码隐藏我的朋友代码隐藏是视图的一部分。此外,如果您正确签出该链接,用户会将TabControl.SelectedItem绑定到ViewModel中的属性。这里根本没有代码:SelectedIndex不适用于您,还选择了SelectedItem?那么您的ViewModel需要改进。请在代码中发布更多代码并检查输出窗口。我想在这里你会偶然发现一些绑定错误。这是来自Josh Smith的示例的代码。它工作正常,只是我无法获取活动选项卡。当我尝试您的方法时,选项卡中没有显示任何内容。
public class MainViewModel 
{
    public ObservableCollection<TabViewModel> Tabs { get; set; }
    public TabViewModel SelectedTab { get; set; }
}
public MainView()
{
    this.DataContext = new MainViewModel()
}
public MainView(MainViewModel vm)
{
    this.DataContext = vm;
}