WPF:使用DataTemplates切换视图 - 如何让视图自动更改其DataContext?

时间:2014-10-15 18:42:29

标签: c# wpf xaml datatemplate contentcontrol

提前感谢您提供的任何帮助!我会直接跳进去!

假设我有以下XAML。我遗漏了一些不需要的部分,希望这些部分更容易阅读。

通过创建一个TreeView个对象的ObservableCollection,在后面的MainWindow代码中填充MainViewModelBase。这些对象的属性基于主窗口代码开始时读入的XML文件。

这会生成TreeViewMainViewModelBase的项目。从那里我想使用字符串" Type" SelectedItem的{​​{1}}的属性(从XML读入),以在屏幕右侧显示UserControl。基于谷歌搜索的TON,下面的代码使用DataTemplates来完成视图切换。

我的问题是这个。我想要填充的UserControl需要绑定到另一个XML文件,该XML文件的名称将基于存储在Treeview中的名为Name的字符串。下面的代码显示了要显示的新视图,但我无法弄清楚如何将新的Views DataContext设置为XML。通过内容控件必须有一些方法来执行此操作。我认为当你使用DataTemplate进行切换时,生成的视图会继承ViewModel类型的DataContext,它会创建"创建"它。但我认为DataContext在视图的构造函数完成之后才会设置。因此,我不能让视图的构造函数根据字符串" name"打开XML。 MainViewModel。有没有办法在事后更新DataContext?谢谢!

另一方面,MainViewModelBase中有很多项,因此有很多XML。我不希望一次将所有XML都存储在内存中,只有当需要它的视图需要它时。

最后,我是WPF的新手,所以如果上述问题的一部分是愚蠢或完全混淆,我会提前道歉。我是从对这项技术不熟悉的人的角度问他们的。

注意:我知道我可以将TreeView直接绑定到初始XML,我将来可能会改用它,我还不确定。大多数在线示例都使用了VeiwModel对象的ObservableCollections,因此以这种方式学习更容易。

TreeView

2 个答案:

答案 0 :(得分:0)

如果我没有错,你阅读了你的帖子后,你基本上在左侧有一个树视图,根据选择你想要在右侧填充一些用户控件。这是要求的关键。

如果是上述情况,可以做的是将左侧视图和右侧视图绑定到单独的视图模型。在从左侧选择某些内容时,您可以在右侧视图的参数化构造函数中传递选择。因此,您将在LHS上选择输入并可以在RHS上进行处理

答案 1 :(得分:0)

经过一些谷歌搜索后,我在codeproject上发现了一个很棒的项目,它描述了如何使用视图模型的想法来加载命令树视图。我真正喜欢这个是它告诉我如何使用INotifyPropertyChanged东西将isSelected属性绑定到视图模型中的某些东西,可以用于XML加载等。

我知道这对你们WPF专家来说似乎很基础,但这对我解释如何真正使用ViewModel模式非常有帮助。

http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode