2012-03-23 52 views
0

我一直在試圖爲年齡做到這一點,任何沒有喜悅。標籤數據改變MVVM

我有以下的層次結構的帶狀窗口:

  • 主窗口
    • 搜索Maincontent(製表控制)
      • TabContainerViewModel
        • ViewModelBase

查看模型基部具有翼片型ViewModelBase的一個ObservableCollection。選項卡控件本身對這些可以很好地綁定,顯示適當的視圖模型。我有2個問題,不過,我希望有一個「NotepadView」(類型viewmodelbase),以被複制了無數次(一個視圖許多視圖模型)。

在分鐘,我有相應的ViewModels 4次(NotePadViewModelx其中x爲1-4),這是因爲每個視圖具有每片相同的文本。現在我每個標籤都有單獨的視圖。

當我輸入到標籤1,並切換到標籤2,我失去了我的標籤一個類型,當我點擊了。

可能有人幫助我提供解決這些問題呢?

  • 一爲的視圖模型
  • 保持信息的多個實例NotepadView當標籤更改

許多在此先感謝。

+0

這意味着你只使用記事本控件的同一個實例嗎? – daryal 2012-03-23 15:41:31

+0

在我的解決方案資源管理器中,我想要一個notepadview和一個notepadview,但是我的選項卡控件中可以有很多它們的實例。所有的notepadview都有一個文本框,理論上我可以模板標籤項的內容只是一個文本框,但我試圖儘可能多地學習MVVM從這樣做。 – LukeHennerley 2012-03-23 15:48:07

+0

作爲問題的進一步總結 - 我的文本框綁定到viewmodelbase中的Text屬性,該屬性更改了屬性的updatesourcetrigger。這很好,當我點擊「新記事本」按鈕時,Text屬性被設置爲無。 – LukeHennerley 2012-03-23 16:27:21

回答

1

我感動頁眉和Text屬性爲ViewModelBase,然後當我加入ViewModelBase作爲一個Tab,我使用ViewModelBase的DataTemplate,就像使用TextBox的NotePadViewModel一樣。

<DataTemplate DataType="{x:Type ui:ViewModelBase}"> 
    <TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox> 
    </DataTemplate> 

至於apose使用這樣的:

<DataTemplate DataType="{x:Type ui:NotepadViewModel}"> 
     <ui:NotePadView DataContext="{Binding}"/> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type ui:NotepadViewModel2}"> 
     <ui:NotePadView2 DataContext="{Binding}"/> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type ui:NotepadViewModel3}"> 
     <ui:NotePadView3 DataContext="{Binding}"/> 
    </DataTemplate> 

感謝雷切爾一個小提示的問題。基本上以前的方式,沒有什麼是實際綁定在數據模板中,因此沒有理由將其作爲資源。通過一個DataTemplate中添加默認文本框,我可以添加,因爲我希望同時能夠增加其不需要文本框等的意見,許多記事本。

0

默認情況下,WPF將重新使用TabItem如有可能,只需更換它背後的DataContext。如果您的媒體資源沒有綁定到DataContext中的任何內容,則在切換標籤頁時,它們將被重置。

所以讓你改變堅持,你需要將它們存儲在DataContext

例如,

<TabControl ItemsSource="{Binding MyNotepadVMCollection}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding SomePropertyOnViewModel}" /> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 
+0

我爲我的選項卡控件使用樣式,然後將項目模板綁定到視圖模型和相應視圖的列表。我應該需要另一個視圖爲我的標籤,例如設置這將有一個文本框不會呢? – LukeHennerley 2012-03-24 09:23:32

+0

@LukeHennerley我打算回覆,但看到你已經把它整理出來:) – Rachel 2012-03-26 13:01:32