代码之家  ›  专栏  ›  技术社区  ›  Nate CSS Guy

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

  •  1
  • Nate CSS Guy  · 技术社区  · 14 年前

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

    我有一个通过添加服务引用添加的Web服务。它有一些方法来获取我的数据库中的一个特殊表的列表和细节。

    我要做的是如下设置一个用户界面:

    1. 应用程序负载
      1. 加载服务代理
      2. 打电话给 GetList(); 方法在列表框控件中显示结果
    2. 用户双击列表框中的项目,显示带有“细节”视图的模式对话框

    我对使用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. 在用户控件中?
      2. 命令呢,这是一个很好的应用程序吗?

    很抱歉,我对这件事很陌生,也没有受过足够的教育,不能提出正确的问题。

    我从wpf.codeplex.com上查看了mvvm示例,但有一些东西还没有完全为我点击,因为它看起来很混乱。

    3 回复  |  直到 14 年前
        1
  •  3
  •   PL.    14 年前
    1. 您的虚拟机将具有:
      • 包含绑定到列表框的项的ObservableCollection。
      • 绑定到列表中当前选定项的当前项
      • DelegateCommand,绑定到双击并调用逻辑以显示详细视图(请参阅MVVM实现此操作的方法,如服务或事件聚合器之类的方法)
      • 调用Invoke GetList()然后填充此Collection的逻辑
    2. 要处理双击的代码将转到vm(参见上文)
        2
  •  1
  •   Nitin Chaudhari    14 年前

    您将有两个视图模型,因为您有两个视图

    1个ViewModel将具有

    1. 您的服务代理
    2. showdetailfor(字符串selecteditemfromlist) 这应该创建一个新的vm2实例,将其传递给ctor中的服务代理,并在vm2上调用showdetail。

    2个ViewModel将

    1. MyObject(如果它只是MessageBox,则不需要具有ViewModel)
    2. ShowDetail(内部ID)

    一旦拥有了视图模型,就可以使用wpf绑定和命令将数据从vm连接到xaml。

    用于用户控件的MVVM变得更加复杂,因此如果可能,请暂时远离用户控件。

        3
  •  0
  •   Chris McKenzie    14 年前

    请参见我的 yodelay 项目。

    您的大部分代码将进入您的视图模型。视图中唯一应该出现的代码是将视图事件连接到视图模型的代码。通常视图中不需要代码,因为大多数布线都可以通过数据绑定来处理。

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