如何在Josh Smith的MVVM演示应用程序中找到当前/活动Tab

时间:2015-01-20 01:45:24

标签: c# wpf mvvm tabcontrol

我一直在调整Josh Smith's MVVM Demo app以满足我的要求。

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

非常感谢任何帮助/想法。

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

1 个答案:

答案 0 :(得分:0)

首先,您的DataContext是错误的,您的DataContext应该是一个ViewModel,您将ItemsSource绑定到ObservableCollection属性。 E.g。

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

你在哪里

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;
}