在M-V-VM中我的代码在哪里?

时间:2010-06-11 19:10:56

标签: .net wpf design-patterns mvvm

所以,这是我希望的一个非常基本的问题。

我有一个我通过添加服务参考添加的Web服务。它有一些方法可以获取列表并在我的数据库中获取特定表的详细信息。

我要做的是按如下方式设置用户界面:

  1. App Load
    1. 加载服务代理
    2. 调用GetList();方法在ListBox控件中显示结果
  2. 用户双击ListBox中的项目,显示带有“详细信息”视图的模式对话框
  3. 我对使用MVVM非常陌生,因此非常感谢任何帮助。

    其他信息:

    // Service Interface (simplification):
    
    interface IService 
    {
        IEnumerable<MyObject> GetList();
        MyObject GetDetail(int id);
    }
    
    // Data object (simplification)
    class MyObject
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
    

    我想我应该有这样的事情:

    MainWindow
        MyObjectViewUserControl 
            Displays list
            Opens modal window on double click
    

    具体问题:

    1. 我的ViewModel类会是什么样的?
    2. 处理双击的代码在哪里?
      1. 在UserControl内部?
      2. 命令怎么样,这会是一个很好的应用吗?
    3. 对不起详细介绍,但我对整件事情都很陌生,而且我没有足够的教育来提出正确的问题。

      我从wpf.codeplex.com查看了MVVM示例,但是我还没有找到一些东西,因为它看起来很混乱。

3 个答案:

答案 0 :(得分:3)

  1. 您的虚拟机会:
    • 一个ObservableCollection,包含绑定到ListBox的项目。
    • 绑定到列表中当前所选项目的CurrentItem
    • 绑定了双击并且调用逻辑以显示详细视图的DelegateCommand(请参阅MVVM执行此操作的方式,即服务或事件聚合器之类的方法)
    • 调用GetList()然后填充此colleciton
    • 的逻辑
  2. 处理双击的代码将转到VM(参见上文)

答案 1 :(得分:1)

您将拥有2个ViewModel,因为您有2个视图

1 ViewModel将具有

  1. 您的服务代理
  2. 列表
  3. ShowDetailFor(string selectedItemFromList) 这应该创建一个新的VM2实例,在ctor中传递服务代理并在VM2上调用ShowDetail。
  4. 2 ViewModel将具有

    1. MyObject(如果它只是messagebox,不需要ViewModel)
    2. ShowDetail(int id)
    3. 使用ViewModel后,使用WPF绑定和命令将数据从VM连接到XAML

      用于用户控制的MVVM变得有点复杂,所以如果可能的话,暂时离开UserControls。

答案 2 :(得分:0)

请参阅我的yodelay项目中的RegularExpressionViewModel示例。

您的大部分代码都将放在ViewModel中。应该在您的视图中唯一的代码是将View的事件连接到ViewModel的代码。通常在视图中不需要代码,因为大多数接线都可以由DataBinding处理。

我使用带有依赖注入的表示抽象层来与对话框进行通信。