C#/ WPF:为什么标签没有正确聚焦

时间:2010-10-21 02:16:08

标签: c# wpf mvvm collectionviewsource

我有一个标签控件

<TabControl Height="Auto" Grid.Row="1" ItemsSource="{Binding Tabs}" IsSynchronizedWithCurrentItem="True">

Tabs中绑定ViewModel。我还使用CollectionViewSource来关注标签

protected ObservableCollection<TabViewModel> _tabs;
protected ICollectionView _tabsViewSource;

public ObservableCollection<TabViewModel> Tabs
{
    get { return _tabs; }
}
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); // focus newly created tab
        }
    if (e.OldItems != null && e.OldItems.Count > 0)
        foreach (TabViewModel tab in e.OldItems)
            tab.CloseRequested -= OnCloseRequested;
}

当我有更多1个标签时,当我创建新标签时,标签正确聚焦

alt text

当没有标签时,新标签似乎没有正确聚焦。注意标题标题

alt text

我该如何解决这个问题?或是什么导致这种行为?显示文本框(选项卡内容),但标题不会像其选中的那样呈现

更新

它适用于一个新的文件/项目...嗯...必须是一些相关的代码......我可能会重做那部分......

2 个答案:

答案 0 :(得分:1)

除非您将IsSynchronizedWithCurrentItem="True"绑定到TabControl.ItemsSource,否则

ICollectionView没有任何意义。

我无法判断将ObservableCollection的绑定更改为ICollectionView是否可以解决您的问题,但这就是我设置数据绑定tabcontrol的方法。

另一种方法是公开新的财产

public TabViewModel CurrentTabViewModel
{
    get
    {
        return _tabs.CurrentItem as TabViewModel:
    }
    set
    {
        _tabs.MoveCurrentTo(value);
    }
}

并将TabControl的SelectedItem绑定到CurrentTabViewModel

<TabControl SelectedItem="{Binding Path=CurrentTabViewModel}" ... />

答案 1 :(得分:0)

没有代码,初始化单标签集合,它只是猜测。 您的解决方法是设置tabView = 0 - &gt;的SelectedIndex。最初选择第一个标签。

<TabControl Height="Auto" 
  Grid.Row="1" 
  ItemsSource="{Binding Tabs}" 
  IsSynchronizedWithCurrentItem="True" 
  SelectedIndex="0">