2010-06-11 144 views
2

我正在嘗試從MSDN中的Todd Miranda的MVVM出色的「How Do I」視頻中獲得示例。WPF/MVVM - 我們應該爲每個ViewModel創建一個不同的類嗎?

我正在嘗試改編我的學習目的的例子。

  1. 在這個例子中,他有一個視圖模型稱爲EmployeeListViewModel。現在如果我想包含部門,我應該創建另一個ViewModel,如DepartmentListViewModel

  2. 該示例具有EmployeeRepository作爲數據源。在我的情況,我想(在數據訪問文件夾Employees.edmx型號文件夾和EmployeeRepository.cs)使用一個實體對象作爲數據源。如果我想顯示部門列表,我應該創建一個名爲DepartmentRepository的單獨類,並將所有與部門相關的方法定義放在那裏?

  3. 如果我想一起檢索員工姓名和部門名稱,該怎麼辦?我應該在哪裏放置這個方法?

我對WPF和MVVM非常陌生,請讓我知道是否需要重新說明上述任何內容。

謝謝你的幫助。

+0

類似於http://stackoverflow.com/questions/2790230/with-mvvm-does-each-ui-window-have-its-own-viewmodel/2790248#2790248 – 2010-06-11 21:20:46

回答

1

這取決於,因爲每種模式更像是和想法/概念,而不是你需要嚴格遵循的事情。通過這樣說,你會注意到有時候是,對每個ViewModel使用一個類是可取的,或者如果適用,可以使用通用ViewModel。 我知道這很難,因爲我是(現在還是我)和你一樣。

在問題2中,我有時做的是檢索和IQueryable,然後將返回的對象「轉換」爲ViewModel。 Repositories/Domain不應該對ViewModel一無所知,因爲它只是一個演示文稿。

應答點3,如果你需要綁定與員工和部門聯合控制, 也許你可以做這樣的事情:

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

希望這闡明你的疑慮。

2

是的,通常每個視圖(頁面,窗口,屏幕)應該有它自己的ViewModel。所以,如果你想要一個列出一些員工的屏幕,你的ViewModel會有一些員工集合(IEnumerable)作爲屬性。然後,您的員工類型將包含他們的姓名,部門,電話分機(等)的屬性。

我不完全清楚您的問題是否要在同一頁面上顯示員工和部門的列表。如果這是你正在嘗試做的,那麼你就必須在你的視圖模型的兩個屬性是某種藏品是這樣的:

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

...這將讓您對您的視圖中顯示兩個集合。

1

這裏沒有硬性規定。我將分別解決每個問題:

  1. 對於每個獨特的視圖,您將擁有一個ViewModel。我認爲調用它[實體] ListViewModel可能會混淆這個問題。將其命名爲視圖的名稱...如果您正在查看DepartmentDashboard,請將其稱爲DepartmentDashboardViewModel。
  2. 對於您的模型,沒有規則,當然也不一定是1:1:1的模型對象比例來查看模型。一般來說,當直接處理數據庫時(例如TheBigDatabase.edmx),我有一個OR/M設置,而這恰好是由許多模型(員工,部門,帳戶,交易等)組成的。在這裏做任何感覺都好的事
  3. 既然你要創建一個包含多個實體的edmx(就像我在#2中建議的那樣),你將能夠利用這些實體之間的關係(員工有部門,我猜想,所以員工。部門將在那裏)。一旦你有了這個,你可以根據需要在一個地方顯示相關的數據。
相關問題