我有一个带有选项卡控件的主窗口,其中包含2 tabItem s:

我目前有1 ViewModel服务Tab1和Tab2。由于SOC模糊,这个ViewModel变得有点肿。我想将逻辑分为2个 View 模型:ViewModel 1和ViewModel2。我的理解是,您可以将主窗口DataContext设置为包含ViewModels集合的Base 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吗?

最佳答案

您确实可以将选项卡的 View 模型添加到主 View 模型。然后,您可以在XAML中为选项卡绑定(bind)到 subview 模型。

假设您有三种 View 模型:MainViewModelTab1ViewModelTab2ViewModel。在MainViewModel上,您保留了选项卡viewmodel的集合:

class MainViewModel
{
    ObservableCollection<object> _children;

    public MainViewModel()
    {
        _children = new ObservableCollection<object>();
        _children.Add(new Tab1ViewModel());
        _children.Add(new Tab2ViewModel());
    }

    public ObservableCollection<object> Children { get { return _children; } }
}

将主窗口的DataContext设置为MainViewModel之后,您可以通过引用DataContext属性来绑定(bind)选项卡的Children:
<TabControl>
    <TabItem DataContext="{Binding Children[0]}" x:Name="Tab1" Header="Tab1" >
      <!-- Tab content -->
    </TabItem>
    <TabItem DataContext="{Binding Children[1]}" x:Name="Tab2" Header="Tab2" >
      <!-- Tab content -->
    </TabItem>
</TabControl>

07-28 03:25
查看更多