我正在尝试从MSDN中发现的Todd Miranda的MVVM的优秀“我如何”视频中的示例。
我正在尝试根据我的学习目的调整示例。
在该示例中,他有一个名为 EmployeeListViewModel 的ViewModel。现在,如果我想要包含Departments,我应该创建另一个ViewModel,例如 DepartmentListViewModel 吗?
该示例将 EmployeeRepository 作为数据源。就我而言,我正在尝试使用Entity对象作为数据源( Model 文件夹中的 Employees.edmx 和 EmployeeRepository.cs 中的 em> DataAccess 文件夹)。如果我想显示Departments列表,我应该创建一个名为 DepartmentRepository 的单独类,并将所有与部门相关的方法定义放在那里吗?
如果我想一起检索员工姓名及其部门名称怎么办?我应该在哪里放置这个方法?
我是WPF和MVVM的新手,如果有任何上述需要重新措辞,请告诉我。
感谢您的帮助。
答案 0 :(得分:2)
是的,通常每个View(Page,Window,Screen)都应该拥有自己的ViewModel。因此,如果您想要一个列出一些员工的屏幕,您的ViewModel会将某种员工集合(IEnumerable)作为属性。然后,您的员工类型将包含其姓名,部门,电话分机(等)的属性。
我不清楚您的问题是否要在同一页面上显示员工和部门列表。如果您正在尝试这样做,那么您的ViewModel中有两个属性,它们是某种类似的集合:
public class EmployeeListViewModel {
public IEnumerable<Employee> Employees { get; set; }
public IEnumerable<Department> Departments { get; set; }
}
...这将允许您在视图上显示两个集合。
答案 1 :(得分:1)
这取决于,因为每个模式都比你需要严格遵循的东西更像是和想法/概念。通过这样说,您会注意到有时是的,建议为每个ViewModel使用一个类,或者如果适用,可以使用通用的ViewModel。 我知道这很难,因为我(现在仍然是)与你的位置相同。
在问题2中,我有时做的是检索和IQueryable,然后将返回的对象“转换”为ViewModel。 Repositories / Domain对ViewModels一无所知,因为它只是一个演示文稿。
回答第3点,如果你需要将一个控件与Employee和Departments绑定在一起, 也许你可以这样做:
public class EmployeeDepartmentsViewModel : BaseViewModel //Base View Model has INPC stuff
{
public Employee Employee { get; set; }
public Department Department { get; set; }
}
希望这能澄清你的疑虑。
答案 2 :(得分:1)
这里没有严格的规则。我将逐一解决每个问题: