2012-07-24 427 views
2

幾周前我開始使用WPF(使用C#),現在我需要一些高級使用tabcontrol的幫助。我使用MVVM(模型視圖ViewModel)模式來設計我的應用程序,並且我有一個約束,試圖不在代碼後面添加代碼(inititalise xaml文件)。WPF MVVM中的動態TabControl

現在我的問題是在我的MainWindow視圖(窗口)中動態創建新的tabItems,當我點擊一個按鈕(例如「New Tab」按鈕)時,它顯示了我的Detail View(Page)的一個實例。

我發現很多關於動態創建關閉網頁tabitem的東西,但經常在代碼後面修改文件。我雖然使用綁定,但我不知道如何使用綁定到這種東西。

回答

3

MVVM將幫助你。

爲您的MainWindow視圖創建一個ViewModel。在那裏你可以有一個DetailViewModels的集合 。在這裏使用DetailViewModels的ObservableCollection

在您的視圖中,將TabControlItemsSource綁定到該集合。

您的AddTab按鈕可以有一個命令綁定。該命令可以是派生類,即發佈在MainWindowViewModel中的ICommand 。按下按鈕 ,然後在MainWindow ViewModel中結束,添加另一個DetailViewModel和 以這種方式更新View。

,看一下在這個MVVM出色的視頻tuturial這裏:Jason Dollinger on MVVM

他解釋瞭如何可以做,與主要的例子和細節視圖模型 和命令。

,他在他的視頻發展的源代碼可以在這裏找到:Sourcecode on Lab49

也許您更輕鬆地創建,這只是由TabControl使用 一個視圖模型。然後將TabControlDataContext設置爲 TabControlViewModel。將您的 MainWindowViewModel中的TabControlViewModel作爲公共屬性發布,以實現此目的。

你的代碼隱藏將是空的,除了一些InitializeComponent可能。

+0

謝謝,我會嘗試。 – Desnoxav 2012-07-24 07:02:22

+0

歡迎您!自己做了這個,工作真的很好。 – 2012-07-24 07:32:05

+0

你用什麼綁定?依賴屬性或INotifyPropertychanged。 Personnaly我目前在我的項目中使用第二個,但我仍然不知道哪個更好。 – Desnoxav 2012-07-24 07:36:21

1

您可以綁定的ItemsSource屬性,該屬性表示選項卡項目的集合。然後你可以從你的ViewModel中操縱集合。

2

Great set關於由Sacha Barber撰寫的關於MVVM的文章包含可下載的應用程序,他公開了他們使用選項卡控件創建動態視圖的方式。您可以下載附加到文章的演示應用程序,瞭解如何使用動態選項卡控件。 示例:

您需要在哪裏綁定代表選項卡內容的數據模型的工作區集合,以及是否需要選項卡的附加屬性。可關閉與否,是否禁用,名稱等。這可以是你的ViewModelBase。創建您的選項卡項目模板以支持您的視圖模型。

<TabControl x:Name="tabControl" 
       IsSynchronizedWithCurrentItem="True" 
       ItemsSource="{Binding Path=Workspaces}" 
       Template="{StaticResource DynamicTabControlTemplate}">   
</TabControl> 
工作空間例如像這樣

工作區=新的ObservableCollection的

初始化集合();

而且,在向收集標籤添加新項目後,控件也會發生更改。