在TabControl中从绑定源动态添加和删除TabItem

时间:2012-06-07 08:09:05

标签: wpf data-binding tabcontrol

有些奇怪的事发生在我身上: - )

我有一个TabControl。 ItemSource绑定到列表。 这是TabItemBase的定义:

public class TabItemBase : UserControl
{
    #region Properties
    public virtual string TabName { get; set; }
    public virtual string TabHeader { get; set; }
    #endregion
}

这是我声明TabControl的XAML:

<TabControl ItemsSource="{Binding Views, Mode=TwoWay}" ItemContainerStyle="{StaticResource TabItemTemplate}"
            SelectedItem="{Binding SelectedView}" Name="MainTabControl" />

样式工作正常,因为从这里我在List中添加一个视图时,它可以工作,我在我的UI中的TabControl中看到它。我只用

添加它
View.Add(new HomeView());

然后我添加了一个管理导航的NavigationService,因为它的名字很明确:-)。这是代码:

public class NavigationService
{
    #region ctor
    public NavigationService(MainViewModel vm)
    {
        ViewModel = vm;
    }
    #endregion

    #region Properties
    public MainViewModel ViewModel { get; set; }
    #endregion

    #region Methods
    public void NavigateTo(string viewName)
    {
        TabItemBase view = ViewModel.Views.FirstOrDefault(v => v.TabName.Equals(viewName));

        if (view == null)
        {
            switch (viewName)
            {
                case ViewNames.Home:
                    view = new HomeView();
                    break;
                case ViewNames.Carriers:
                case ViewNames.Clients:
                    break;
                case ViewNames.Commands:
                    view = new CommandsView();
                    break;
                case ViewNames.Help:
                case ViewNames.Inputs:
                case ViewNames.Providers:
                case ViewNames.Sorts:
                case ViewNames.Users:
                    break;
                default:
                    MessageBox.Show(DefaultMessages.NavigationFailed);
                    return;
            }
            ViewModel.Views.Add(view);

            ViewModel.OnPropertyChanged("Views");
        }

        if (ViewModel.SelectedView != null && ViewModel.SelectedView.DataContext != null)
        {
            (ViewModel.SelectedView.DataContext as ViewModelBase).OnUnLoaded();
        } 
        ViewModel.SelectedView = view;
        (ViewModel.SelectedView.DataContext as ViewModelBase).OnLoaded();
    }
    #endregion
}

我这样做(点击我的按钮时):

NavigationService ns = new NavigationService(this);
ns.NavigateTo(ViewNames.Commands);

哪个不行。它在集合中添加了视图,但我没有在UI中看到它。

有人可以帮我解决这个问题吗?因为我开始松开毛发?

干杯

托马斯

1 个答案:

答案 0 :(得分:0)

您的TabItemBase必须继承TabItem而不是UserControl,或者您必须定义TabControl.ItemTemplate

让我知道哪种解决方案适合您。