TabControl在Window.Show时失去选定的选项卡

3
我们有一个MVVM(Cinch)解决方案,其中包含一个带有TabControl的窗口。ItemsSource绑定到一个CollectionView(从ObservableCollection生成的DefaultView),并且IsSynchronizedWithCurrentItem=true。第一次加载窗口时,一切都运行良好...选项卡正确显示,并且用户可以在它们之间切换。
当窗口隐藏并再次显示时,出现问题。第一个选项卡总是被重新选择,而不管CollectionView中的CurrentItem是什么。调用.Show之前的代码将CurrentItem设置为我们想要的选项卡,但是在.Show操作过程中,选项卡会发生变化。
有其他人遇到过此问题吗?

我刚刚用演示项目测试了一下,但是我无法重现这个问题。 http://dl.dropbox.com/u/18919663/mvvmbug.png有两个按钮,一个隐藏窗口,一个显示窗口,窗口中有一个选项卡视图,选项卡在隐藏和显示之间保持不变。如果每次调用时重新初始化第二个窗口(即Windows2 myWin = new Window2(); myWin.Show();),则会重置。 - corylulu
如果你只是调用.Show和.Hide,我不明白为什么会出现问题,如果你为每个显示创建一个新实例,那么这就是你的问题。 - corylulu
窗口及其VM在应用程序的整个生命周期中保留,因此我认为这与MEFedMVVM / Cinch框架有关。 - ZF.
1
经过进一步测试,我发现问题出在窗口关闭时焦点仍停留在选项卡上。为了解决这个问题,我在每次更改所选选项卡时将焦点设置到选项卡控件之外的控件上。 - ZF.
1个回答

1

这绝对是一种非常巧妙的方法。但你可以通过覆盖Activated事件并在其被重置之前存储选项卡索引,然后在其重新激活时再次设置它。

protected override void OnActivated(EventArgs e)
{
    int tabControlIndex = myTabController.SelectedIndex;
    base.OnActivated(e);
    myTabController.SelectedIndex = tabControlIndex ;
}

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