【问题标题】:WPF MVVM controls sharing infoWPF MVVM 控制共享信息
【发布时间】:2009-11-17 15:01:58
【问题描述】:

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

我有一个管理“配置文件”的 xaml 窗口。左半部分是绑定到 ViewModel 的自定义控件树视图,该视图模型读取数据库并创建配置文件的层次结构。各个配置文件的 ViewModel 包含一个数据库 ID。右半部分是另一个自定义控件,带有一个 ListView 和它自己的 ViewModel,它可以读取数据库中的各个 Profile 信息。

两半独立工作正常,但现在我想将树视图选择与列表视图联系起来,以便列表视图中的信息反映树视图选择。最好的方法是什么?

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

-树视图的视图模型可以调用列表视图视图模型中的静态方法来更新配置文件。

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

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

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

还有什么想法?

谢谢!

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    您在使用 Prism 吗?校准 WPF?如果是这样,您可能要考虑使用复合事件。这些是跨 ViewModel 工作的事件,还有 CompositeCommands。

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

    public class ProfileSelectedEvent : CompositePresentationEvent<Profile>
    {
    }
    

    然后您可以使用 EventAggregator 订阅和发布复合事件。如果您将 Prism/CAL 用于 WPF,您将插入 Unity,因此您只需将 IEventAggregator 放在 ViewModel 的构造函数中

    TreeViewViewModel(IEventAggregator eventAggregator)
    

    然后你可以通过 EventAggregator 发布和订阅 Event ...

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

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

    希望这会有所帮助,

    安迪

    【讨论】:

    • 我没有使用 Prism/CAL,实际上这是我第一次听说它。使用它是否正在成为我应该养成使用习惯的普遍趋势……换句话说,我是否进入了一个痛苦的世界,试图仅使用基本的 WPF 安装结构和 MVVM 结构来学习?
    • 它只是提供了一个非常好的构建框架——这里有一篇关于它的 MSDN 文章...... msdn.microsoft.com/en-us/magazine/cc785479.aspx 但你真正想要做的是下载这个并加载微软拥有的 StockTrader 应用程序作为示例创建...microsoft.com/downloads/… 这将向您展示如何将事物组合在一起,以及我如何开始使用 WPD 和 MVVM。希望这会有所帮助...
    • 谢谢,安迪。我花了一点时间来理解 Prism 及其含义。深入挖掘,我使用 EventAggregator 将完成我想做的事情。这给了我大致的方向,而不仅仅是一行代码。感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多