2013-06-05 64 views
2

因此,我對WPF和MVVM相當陌生,我在這裏遇到了一個TabControl問題,並試圖在切換標籤時保留數據。基本上我有一個TabControl內的視圖和TabItems動態加載和基於用戶交互刪除。每個TabItem都是一個UserControl,它是具有自己的視圖模型的自己的視圖。如何在WPF MVVM中動態設置視圖的DataContext

每次刪除一個TabItem(並不總是隻是轉到另一個選項卡,有時這些選項卡實際上被刪除並重新創建)我正在保存其viewmodel的實例並保留數據,但我無法獲取該數據當標籤被重新創建時。我使用一個DataTemplate創建的TabItems

<DataTemplate x:Key="MyView" DataType="{x:Type vm:MyViewModel}"> 
    <uc:MyView /> 
</DataTemplate> 

和引用,在TabControl的。

<TabControl ItemsSource="{Binding ViewModelList, Mode=TwoWay}" 
      ContentTemplate="{StaticResource MyView}" 
      ItemTemplate="{StaticResource MyHeader}" 
      SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}" /> 

一切正常,只要能夠顯示的一切方式,但我一次比一次一個新的空白版本我的用戶的。設置爲ViewModelList的itemssource正是它聽起來的樣子,我的viewmodel實例列表保存每個選項卡的狀態,以便重新創建它。這裏的問題是,這裏使用的DataTemplate方法並不真正讓我有辦法將視圖模型數據綁定到每次創建新TabItem時創建的視圖的新實例。

我沒有使用MVVMLight或棱鏡,但我有我嘗試在這裏使用的自定義EventAggregator。我遇到的問題是在正確的時間將數據傳送到視圖模型的正確實例。我認爲我的問題的一部分是,MyViews datacontext正在其代碼隱藏構造函數中設置爲MyViewModel的新實例,它覆蓋了我嘗試傳入的任何其他內容...

我只是不知道如何修復這個。我對這個漫長的問題表示歉意,但我想盡力涵蓋一切。如果有人需要更多信息,請提前告知我!

回答

2

嗯不是很確定,但它值得一試。我認爲,如果你修改你的DataTemplate就像

<DataTemplate x:Key="MyView" DataType="{x:Type vm:MyViewModel}"> 
    <uc:MyView DataContext={Binding} /> 
</DataTemplate> 

它可能工作。嘗試一下,讓我知道。

好吧,這很奇怪。從MSDN

  • 物品 - 獲取用於生成ItemsControl的內容的集合。 (繼承自ItemsControl。)

[...]

  • 的ItemsSource - 獲取或設置用於生成ItemsControl的內容的集合。 (繼承自ItemsControl。)

您可能需要使用Items而嘗試。

+0

好吧,它沒有破壞任何東西,很難說它是否改變了一切。我得多挖一點。這正是我想到的想法,只是希望這是可能的。 – aw04

+0

它工作還是不工作? – DHN

+0

不要自己至少 – aw04