代码之家  ›  专栏  ›  技术社区  ›  FMFF

wpf/mvvm-我们应该为每个视图模型创建不同的类吗?

  •  2
  • FMFF  · 技术社区  · 15 年前

    我正在尝试这个例子,这是由托德·米兰达(ToddMiranda)在msdn中为MVVM制作的优秀“我该怎么做”视频。

    我正努力使这个例子适合我的学习目的。

    1. 在这个例子中,他有一个名为 员工列表视图模型 . 现在,如果我想包括部门,是否应该创建另一个视图模型,例如 部门列表视图模型 ?

    2. 例子有 雇员报告 作为数据源。在我的例子中,我尝试使用实体对象作为数据源( EDMX 在里面 模型 文件夹和 员工报告.cs 在里面 数据访问 文件夹)。如果我想显示部门列表,我应该创建一个单独的类,名为 部门存储库 把所有与部门相关的方法定义放在那里?

    3. 如果我想同时检索员工姓名和他们所在部门的名称怎么办?我应该把这些方法放在哪里?

    我对wpf和mvvm很陌生,如果需要重新表述上述内容,请告诉我。

    谢谢你的帮助。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Marcote    15 年前

    这要看情况而定,因为每一个模式都比你需要严格遵循的东西更像和想法/概念。通过这样说,您会注意到有时是的,建议对每个ViewModel使用类,或者在适用时使用通用的ViewModel。 我知道这很难,因为我和你在同一个职位上。

    在问题2中,我有时要做的是检索和查询,然后将返回的对象“翻译”到一个视图模型。存储库/域不应该对视图模型一无所知,因为它只是一种表示方式。

    回答点3,如果需要将控件与员工和部门绑定在一起, 也许你可以这样做:

    public class EmployeeDepartmentsViewModel : BaseViewModel //Base View Model has INPC stuff
    {
        public Employee Employee { get; set; }
        public Department Department { get; set; }
    }
    

    希望这能澄清你的疑虑。

        2
  •  2
  •   Nick DeVore    15 年前

    是的,通常每个视图(页面、窗口、屏幕)都应该有自己的视图模型。因此,如果您希望有一个列出某些员工的屏幕,那么您的视图模型将具有某种类型的员工集合(IEnumerable)作为属性。然后,您的员工类型将包含其姓名、部门、电话分机(等等)的属性。

    我不太清楚你是否想在同一页上显示员工和部门的列表。如果您正试图这样做,那么您的ViewModel中有两个属性,它们是类似于以下类型的集合:

    public class EmployeeListViewModel {
         public IEnumerable<Employee> Employees { get; set; }
         public IEnumerable<Department> Departments { get; set; }
    }
    

    …这将允许您在视图上显示两个集合。

        3
  •  1
  •   Anderson Imes    15 年前

    这里没有硬性规定。我将分别处理每个问题:

    1. 对于您拥有的每个独特的视图,您将拥有一个视图模型。我认为调用它[实体]listviewmodel可能混淆了这个问题。将其命名为视图的名称…如果您正在查看DepartmentDashboard,请将其称为DepartmentDashboardViewModel。
    2. 对于您的模型,没有规则,当然也不需要模型对象与视图的比例为1:1:1。通常我在直接处理数据库(如bigdatabase.edmx)时有一个或/m设置,而这恰好由许多模型(员工、部门、帐户、交易等)组成。在这里做任何感觉好的事情。
    3. 因为您要创建一个包含多个实体(如我在2中建议的那样)的EDMX,所以您可以利用这些实体之间的关系(我想员工有部门,所以员工有部门)。一旦你有了这个,你可以在一个地方显示相关的数据,如果你愿意的话。