首页 文章

TabControl不显示选项卡集合

提问于
浏览
0

我正在尝试构建一个非常简单的基本应用程序,它使用MVVM模式将选项卡项添加到选项卡控件 . 所以我创建了:一个带有一个按钮的简单视图 - “CustomerView.xaml”

一个空的ViewModel类 - 它是空的,因为视图不保存或从Viewmodal中提取任何信息(只有一个按钮) - “CustomerViewModel.cs”

MainWindow类代码包含一个可观察的CustomerViewModel集合,并有一个“添加客户”按钮 - 将客户选项卡项添加到tabcontrol和tabcontrol本身 .

我不使用命令,因为此时它不相关,我只是在我向集合中添加新的CustomerViewModel时出现的新tabitem .

结果是,虽然我可以看到CustomerViewModels被添加到Observable集合中,但我仍然没有看到tabitems添加到tabcontrol - 集合没有更新tabcontrol .

这是MainWindow XAML:

<Window x:Class="MyViewModalTabControl.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:vm="clr-namespace:MyViewModalTabControl.ViewModal"
    xmlns:vw="clr-namespace:MyViewModalTabControl.Views"

    Title="MainWindow" Height="350" Width="525">
<Window.Resources>

    <DataTemplate DataType="{x:Type vm:CustomerViewModel}">
        <vw:CustTabView />
    </DataTemplate>

    <DataTemplate x:Key="ClosableTabItemTemplate">
        <DockPanel Width="120">
            <Button 
            Content="X"
            Cursor="Hand"
            DockPanel.Dock="Right"
            Focusable="False"
            FontFamily="Courier" 
            FontSize="9"
            FontWeight="Bold"  
            Margin="0,1,0,0"
            Padding="0"
            VerticalContentAlignment="Bottom"
            Width="16" Height="16" 
            />
                    <ContentPresenter 
            Content="Sample" 
            VerticalAlignment="Center" 
            />
        </DockPanel>
    </DataTemplate>

</Window.Resources>

<Grid Margin="4" ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"/>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Button Name="CustTabButton" Content="New Customer" Height="30" Margin="12,136,9,136" Click="CustTabButton_Click"></Button>


    <TabControl Grid.Column="1" Grid.Row="0" Background="Red"
                ItemsSource="{Binding CustomerTabs}" 
                ItemTemplate="{StaticResource ClosableTabItemTemplate}"
                >


    </TabControl>
</Grid>

这是MainWindow背后的代码:

public partial class MainWindow : Window
{
    private ObservableCollection<CustomerViewModel> _customertabs;
    public ObservableCollection<CustomerViewModel> CustomerTabs
    {
        get
        {
            if (_customertabs == null)
            {
                _customertabs = new ObservableCollection<CustomerViewModel>();
               // _workspaces.CollectionChanged += this.OnWorkspacesChanged;
            }
            return _customertabs;
        }
    }

    public MainWindow()
    {
        InitializeComponent();
    }

    private void CustTabButton_Click(object sender, RoutedEventArgs e)
    {

        CustomerViewModel CustomerWorkSpace = new CustomerViewModel();
        this.CustomerTabs.Add(CustomerWorkSpace);

    }


}

这是Viewmodel类:

public class CustomerViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

}

这是视图:

UserControl x:Class="MyViewModalTabControl.Views.CustTabView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Button Name="CustTabButton" Content="New Customer" Height="30" Margin="12,136,9,136"></Button>
</Grid>

我错过了什么?

3 回答

  • 0

    你在哪里设置主窗口的datacontext?您的绑定将使用正确的Datacontext .

    并且创建一个mainviewmodel也不是更好,它会处理你现在放在mainwindow.cs中的东西吗?

    编辑:请看看乔什史密斯的this msdn帖子 . 在那里你也可以找到一个可关闭的标签 .

  • 0

    请尝试以下任何一种方法

    • ClosableTabItemTemplate 应该"return" TabItem 将显示在Tab控件中而不是 DockPanel

    • TabItem 控件创建template

    • code中执行

  • 2

    这是修复:

    public MainWindow()
    {
         InitializeComponent();
         this.DataContext=this;   
    }
    

相关问题