0

私に何か奇妙なことが起こります:-)

私は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" />

ここからリストにビューを追加すると、それが機能し、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 に表示されません。

抜け毛が始まったので誰か助けてくれませんか?

乾杯

トーマス

4

1 に答える 1

0

の代わりにTabItemBaseから継承するか、を定義する必要があります。TabItemUserControlTabControl.ItemTemplate

あなたに合った解決策を教えてください。

于 2012-06-07T08:23:01.893 に答える