我有一个制表符控件,其中每个TabItem都是UserControl。我想在TabControl的ItemsSource中保存UserControls。 ItemsSource列表是否在Window的ViewModel中?如果是这样的话,我觉得它打破了MVVM,因为ViewModel现在会有GUI控件。或者我将此列表放在包含选项卡控件的窗口的代码隐藏中?
任何建议都会很棒!
答案 0 :(得分:0)
使用选项卡控件,通常在XAML中静态创建单个选项卡,而不是在运行时通过数据绑定创建。但是你没有理由不这样做。如果您有一组视图,它们肯定应存储在视图中。
请记住,您还可以将ItemsSource绑定到ViewModels对象列表,WPF将使用ItemTemplate为您生成视图,并将ViewModel对象设置为DataContext。这个ViewModel集合应该存储在视图模型中,尽管在某些时候视图模型显然必须存储在视图中。
答案 1 :(得分:0)
这很有可能以多种方式完成,所有这些方式都在争论它们对“MVVM友好”的方式。
我的设置如下所示。
我的主窗口有一个绑定到MainWindowViewModel的DataContext,其中包含一个属性
public ObservableCollection<Workspace> WorkspaceCollection{get;set;}
MainWindow有TabControl
ItemsSource
绑定WorkspaceCollection
工作区都是视图模型,并通过DataTemplates绑定到不同的视图/用户控件
答案 2 :(得分:0)
您可以查看 WPF Application Framework (WAF) 的 Write 示例应用程序。它有一个TabControl,其中每个TabItem都是UserControl,它通过应用MVVM模式来实现这一点。
答案 3 :(得分:0)
这就是我所做的。 我创建了一个我的所有控件实现的接口,IMyAppControl,它有一些信息,如标题,描述,其他元数据。
My Main Window有一个ObservableCollection,它与ItemsSource绑定的标签有关。