2012-03-23 73 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