TabControl не показывает коллекцию вкладок - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь создать очень простое и простое приложение, которое добавляет элементы вкладок в элемент управления вкладками, используя шаблон MVVM.Итак, я создал: простое представление с одной кнопкой - «CustomerView.xaml»

пустой класс ViewModel - оно пустое, потому что представление не сохраняет и не извлекает информацию из Viewmodal (есть только одна кнопка)- "CustomerViewModel.cs"

Код класса MainWindow содержит наблюдаемую коллекцию CustomerViewModel и имеет одну кнопку "Добавить клиента" - для добавления элемента вкладки клиента в tabcontrol и сам tabcontrol.

я не использую команды, потому что это не имеет значения в настоящее время, я просто был новым табитем, появляющимся, когда я добавляю новую CustomerViewModel в коллекцию.

результат таков, хотя я могу видетьчто CustomerViewModels добавляются в коллекцию Observable, я до сих пор не вижу табитемы, добавленные в tabcontrol - Коллекция не обновляет tabcontrol.

Это XAML MainWindow:

<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>

Это код основного окна:

 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 ]

2 голосов
/ 19 января 2012

где вы устанавливаете текст данных для своего главного окна? Ваши привязки будут работать только с правильным Datacontext.

и не лучше ли было бы создать модель mainview, которая обрабатывает то, что вы положили в mainwindow.cs на данный момент?

РЕДАКТИРОВАТЬ: пожалуйста, посмотрите на это MSDN сообщение от Джош Смит. там вы также можете найти закрывающуюся вкладку.

0 голосов
/ 19 января 2012

Это исправление:

public MainWindow()
{
     InitializeComponent();
     this.DataContext=this;   
}
0 голосов
/ 19 января 2012

Попробуйте любое из следующих

  • ClosableTabItemTemplate должно "вернуть" TabItem, которое будет отображаться в элементе управления Tab, а не DockPanel
  • create шаблон для TabItem элемента управления
  • сделать это в код
...