【问题标题】:MVVM Tabs: Focus new tabMVVM 选项卡:聚焦新选项卡
【发布时间】:2011-04-27 07:55:52
【问题描述】:

我可以添加和删除类似于著名的MSDN article 的标签。基本上是ObservableCollection<TabViewModels>。我添加了_tabs.Add(new TabViewModel()) 之类的选项卡,但最新的选项卡没有聚焦。我想把它集中起来。我该怎么做?

一种方法

因为我有我的 observable 集合的视图源,我可以执行以下操作...另一个选项将是 @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;
}

【问题讨论】:

    标签: c# wpf mvvm observablecollection


    【解决方案1】:

    使用 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。这样一来,我就不再需要其他财产了
    • 这很好用,MVVM 在这种情况下非常可爱。顺便说一句,我使用了 SelectedValue 和 SelectedValuePath。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多