MVVM Tabs: 聚焦新标签页

3
我可以添加和删除标签,类似于著名的MSDN文章。基本上是一个ObservableCollection<TabViewModels>。我添加标签的方式是_tabs.Add(new TabViewModel()),但最新的标签没有聚焦。我想要将其聚焦。我该怎么做?
一种方法是,因为我对可观察集合有一个视图源,所以可以执行以下操作......另一种选项是@vorrtex方法。
public void OnTabsChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (e.NewItems != null && e.NewItems.Count > 0)
        foreach (TabViewModel tab in e.NewItems)
        {
            tab.CloseRequested += OnCloseRequested;
            _tabsViewSource.MoveCurrentTo(tab);
        }
    if (e.OldItems != null && e.OldItems.Count > 0)
        foreach (TabViewModel tab in e.OldItems)
            tab.CloseRequested -= OnCloseRequested;
}
1个回答

10

使用SelectedItem:

    public ObservableCollection<TabViewModel> Pages { get; set; }

    private TabViewModel currentPage;

    public TabViewModel CurrentPage
    {
        get { return currentPage; }
        set
        {
            currentPage = value;
            OnPropertyChanged("CurrentPage");
        }
    }

    public void AddPage()
    {
        var page = new TabViewModel();
        this.Pages.Add(page);
        this.CurrentPage = page;
    }

XAML:

<TabControl ItemsSource="{Binding Pages}" SelectedItem="{Binding CurrentPage, Mode=TwoWay}" />

我还发现了另一种方法来实现它,在我的更新中,因为我正在使用 CollectionViewSource。这样,我就不需要再添加另一个属性了。 - Jiew Meng
这个很好用,MVVM在这种情况下非常可爱。顺便说一下,我使用了SelectedValue和SelectedValuePath。 - Aphex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接