我正在按照 MVVM 制作 WPF 应用程序。我在我的应用程序中想要的是有一个 View ,其中包含一些常见的按钮和文本框以及一个 TabControl 。 TabControl 将基本上托管不同的 UserControls 。因此,对于每个 UserControl,我准备了一个单独的 View 和一个 ViewModel

所以我的应用程序的结构看起来像这样。

MainWindow.Xaml
    EntryView.Xaml
        Button1
        Button2
        TabControl
            UserControl1 (View)
            UserControl2 (View)
            UserControl3 (View)

我的 EntryView 中的儿子我有选项卡控件。现在我需要绑定(bind)它。

这是我所做的。

EntryView.Xaml
<TabControl ItemsSource="{Binding Tabs}" SelectedItem="{Binding SelectedTab}">
    <TabControl.ContentTemplate>
        <DataTemplate DataType="{x:Type vm:UserControl1ViewModel}">
            <v:UserControl1View/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:UserControl2ViewModel}">
            <v:UserControl2View/>
        </DataTemplate>
    </TabControl.ContentTemplate>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="Header"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
</TabControl>

EntryViewModel.cs
private ObservableCollection<BaseViewModel> _tabs;
public ObservableCollection<BaseViewModel> Tabs
{
    get
    {
        if (_tabs == null)
        {
            _tabs = new ObservableCollection<BaseViewModel>();
            _tabs.Add(new UserControl1ViewModel());
            _tabs.Add(new UserControl2ViewModel());
        }
        return _tabs;
    }
}

但是现在当我运行我的应用程序时什么也没有发生。 TabControl 为空。我在 View 模型的 Tabs 中放置了断点,但它没有被击中。所以问题一是我这样做对吗?如果没有,那我该怎么办?

最佳答案

对于初学者,我不知道它如何在您的机器上编译,因为在我的机器上它给了我这个错误:



但是,当我将 DataTemplates 移动到 TabControl.Resources 时,它​​会编译并正常工作:

<TabControl>
   <TabControl.Resources>
      <DataTemplate DataType="{x:Type vm:UserControl1ViewModel}">
         <v:UserControl1View/>
      </DataTemplate>
      <DataTemplate DataType="{x:Type vm:UserControl2ViewModel}">
         <v:UserControl2View/>
      </DataTemplate>
   </TabControl.Resources>
   <TabControl.ItemTemplate>
      <DataTemplate>
         <TextBlock Text="Header"/>
      </DataTemplate>
   </TabControl.ItemTemplate>
</TabControl>

关于c# - 包含使用 MVVM 的不同用户控件的 TabControls,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17063014/

10-13 09:22