后,我曾与WPF-的TabControl所选择的项目,可以用下面简单的代码被复制了一个问题:WPF的TabControl的SelectedItem重置窗口已经关闭
如果创建了一个新的TabItem,并通过点击选择 - 第二个窗口中的按钮事件,选项卡被创建,添加和选择。当第二个窗口关闭时,选项卡控件的选定项目重置为最后选择的项目。这个问题发生在我的MVVM-app中,它独立于Items-collection。我可以使用ItemsSource或Items-Collection,它总是发生。
有人知道这里发生了什么,或有一个很好的解决方法?
TabControl tabControl = new TabControl() ;
tabControl.Items.Add(new TabItem { Header="InitialTabItem"});
((TabItem)tabControl.Items[0]).Focus();
Window mainWindow = new Window() { Content=tabControl,Title="TabControl-Window"};
mainWindow.Show();
Button addButton = new Button() { Content="AddTabItem"};
addButton.Click += (o, e) => {
TabItem newTabItem=new TabItem(){Header=DateTime.Now.ToLongTimeString()};
tabControl.Items.Add(newTabItem);
tabControl.SelectedItem = newTabItem;
};
Window directorWindow = new Window() { Owner = mainWindow ,Content=addButton,Height=80,Width=200,Title="DirectorWindow"};
directorWindow.Show();
更新
这似乎是一如既往,当我有更大的问题与WPF,是一个问题与focus-management。如果我更改创建代码如下,它的工作原理:
TabItem newTabItem=new TabItem(){Header=DateTime.Now.ToLongTimeString()};
tabControl.Items.Add(newTabItem);
Dispatcher.BeginInvoke(new Action(delegate{
newTabItem.Focus();
tabControl.SelectedItem = newTabItem;
}), System.Windows.Threading.DispatcherPriority.Input, null);
但它看起来不是很自信地对我。一些想法?
您是否真的使用MVVM模式?因为你正在创建所有这些标签uisng代码。为什么不考虑使用绑定到TabControl的ItemSource属性的可观察集合, – TalentTuner 2010-09-05 17:25:24
@saurabh:它的演示代码来重现错误。真正的应用程序与ViewModel一起工作,该ViewModel提供了Tab项的ItemsSource以及SelectedTabItem属性。但我不喜欢张贴大量的代码示例。没有人喜欢研究巨大的代码块来看到一个简单的问题。正如我写的,如果我使用Items或ItemsSource属性没有区别。这是一个普遍的问题,可以通过上面的代码进行复制。 – HCL 2010-09-05 17:29:30