2009-11-17 88 views
0

我正在学习WPF和MVVM,并试图强调良好的设计。我有很多有关WinForms和C#的经验。这是概念性的,所以我不认为我需要发布代码。WPF MVVM控件共享信息

我有一个管理“配置文件”的xaml窗口。左半部分是绑定到ViewModel的自定义Control树视图,该ViewModel读取数据库并创建一系列配置文件。各个配置文件的ViewModel包含一个数据库ID等等。右半部分是另一个自定义控件,带有一个ListView和它自己的ViewModel,用于读取个人配置文件信息的数据库。

这两个部分都可以独立工作,但现在我想将列表视图与树视图选择联系起来,以便列表视图中的信息反映树视图选择。做这个的最好方式是什么?

treeview viewmodel提供了一个配置文件ID,可用于在列表视图中查找配置文件信息。再次,目标是将这两者联系在一起。我觉得我有几个选择:

-treeview的viewmodel可以在listview viewmodel中调用一个静态方法来更新配置文件。

- 整个页面可能包含具有两个组件的成员视图模型的视图模型。

- 我可以以某种方式将treeviewss viewmodel的已知选定配置文件“路由”到xaml文件中的listview控件。

所有这些选项都很脏。再次我在这里学习,并且想要强调良好的设计,因为稍后这些小细节决定更大的决定。

和想法?

谢谢!

回答

1

您是否在使用棱镜? CAL WPF?如果是这样,你可能要考虑使用复合事件。这些事件可以在ViewModels上运行,也有CompositeCommands。

您可以设置像这样的复合事件...

public class ProfileSelectedEvent : CompositePresentationEvent<Profile> 
{ 
} 

然后,您可以使用EventAggregator订阅和发布的复合事件。如果您使用棱镜/ CAL为WPF你必须团结插上,所以你可以把IEventAggregator在您的视图模型

TreeViewViewModel(IEventAggregator eventAggregator) 

构造然后你就可以发布和订阅经过EventAggregator事件...

EventAggregator.GetEvent<ProfileSelectedEvent>().Publish(profile); 

订阅是非常相似的......我相信你明白了!

希望这有助于

安迪

+0

我不使用棱镜/ CAL,其实这是我第一次听说过它。正在使用它成为一种常见的趋势,我应该养成使用习惯...换句话说,我是否正在尝试学习基本的WPF安装结构和MVVM结构,进入一个受到伤害的世界? – bufferz 2009-11-17 17:27:33

+0

它只是提供了一个非常好的框架来建立 - 继承人的MSDN文章... http://msdn.microsoft.com/en-us/magazine/cc785479。aspx 但是你真正想要做的就是下载并加载微软创建的StockTrader应用程序作为示例... http://www.microsoft.com/downloads/details.aspx?FamilyId=6DD3D0C1 -D5B4-453B-B827-98E162E1BD8D&displaylang = en 这将向您展示如何将事物放在一起,以及我如何开始使用WPD和MVVM。希望这有助于... – 2009-11-17 17:37:37

+0

谢谢,安迪。我花了一点时间了解棱镜和它的内容。挖掘更深入,我使用和EventAggregator会完成我想要做的事情。这使我不仅仅是一行代码的普遍方向。感谢您的输入! – bufferz 2009-11-19 14:53:11