【发布时间】:2014-10-06 14:45:40
【问题描述】:
我有一个带有选项卡控件的主窗口,其中包含 2 个tabItems:
我目前有 1 个ViewModel 为 Tab1 和 Tab2 提供服务。这个ViewModel 因 SOC 模糊而变得有点臃肿。我想将逻辑拆分为 2 个视图模型:ViewModel 1 和 ViewModel2。我的理解是,您可以将主窗口DataContext 设置为包含 ViewModel 集合的基本 ViewModel,然后您可以将每个 TabItem 断言为不同的 ViewModel。
我看到的这些基本 ViewModel 的示例公开了一个 ObservableCOllection,如下所示:
private ObservableCollection<ViewModel1> _viewModelCollection
Public Observable Collection<ViewModel1> ViewModelCollection
{
get { return _viewModelCollection; }
set
{
_viewModelCollection = value;
OnPropertyChanged("ViewModelCollection");
}
}
public BaseViewModel()
{
ViewModelCollection = new ObservableCollection<ViewModel1>();
ViewModelCollection.Add(new ViewModel1(Tab1);
ViewModelCollection.Add(new ViewModel1(Tab2);
}
但是如何为每个 TabItem 分配不同的 ViewModel?我想要 Tab1= ViewModel1 & Tab2=ViewModel2?
【问题讨论】:
-
我不确定是否有明确的最佳实践。将
TabControl的ItemsSource绑定到您的ViewModelCollection对您没有多大好处,因为没有通用的“模板”(每个选项卡可能都有自己的视图)。如果您有固定数量的选项卡,我只需将每个选项卡的DataContext绑定到相应的视图模型,并将每个选项卡的内容设置为适当的视图。如果标签是动态的,事情就会变得棘手。 -
@Sinatr 是的,我已经阅读了这些问题。我想绑定到不同的 ViewModel,而不是同一 ViewModel 的不同实例的集合...