後,我曾與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