2013-06-18 176 views
2

我對使用父子模型關係的MVVM的最佳實踐有些疑問。MVVM - ViewModel/Model binding

在該特定情況下,有兩個模型(數據類)稱爲組和聯繫人。該組包含聯繫人列表。他們都在實現INotifyPropertyChanged接口。

在視圖中,存在一個使用DataTemplate顯示層次結構的樹視圖,並且關聯的ViewModel包含一個ObservableCollections屬性。

我在想這是什麼樣的最佳實踐設計......在ViewModel中綁定到xaml或爲每個模型(如GroupViewModel和ContactViewModel)創建一個ViewModel的上面有一個屬性,而不是ObservableCollections有一個List。

什麼是最好的方法(設計明智)? Shoudl我將Model或ViewModel綁定到xaml?

+0

您應該綁定到視圖模型。 –

回答

3

恐怕你混了一些東西。 MVVM的基礎知識是

  • 模型 - 包含應用程序正在使用的數據。它應該保持儘可能簡單。
  • ViewModel - 反映應用程序的狀態幷包含業務邏輯。這是業務層。
  • 視圖 - 解釋ViewModel以提供業務層及其狀態的直觀表示。

有了這三個部分,提供問題分離和分離架構非常容易。如果你想閱讀更多,click here

回到你的問題:

在這種特定情況有兩種模式(數據類)稱爲集團和聯繫。該組包含聯繫人列表。他們都在實現INotifyPropertyChanged接口。

這有點奇怪。通常,您不需要在模型類中實現INotifyPropertyChanged,因爲VM應該處理視圖中的值更改。

但在模型層中也可以想象得到這種機制。但既然你不想追蹤這層和IMHO的變化,虛擬機應該關心,你不需要它。

[...]具有在ViewModel一個屬性像上面被結合到XAML或createing一個ViewModel每個模型(如GroupViewModel和ContactViewModel)[...]

是,這通常是方法。對於應傳遞給視圖圖層的每個模型類,您將創建ViewModel

[...]而不是具有列表的ObservableCollections。

這絕對是一個號碼如果您使用List<T>,視圖不會意識到集合的更改(添加,刪除)。

什麼是最好的方法(設計明智)? Shoudl我將Model或ViewModel綁定到xaml?

只需粘貼到MVVM。該視圖知道該VM,但VM不知道該視圖。此外,虛擬機知道該模型,但該模型沒有意識到它。這意味着,您應該始終將VM綁定到View。

編輯

以下是完全合法的。

public class Address : ViewModelBase // implements INotifiedPropertyChanged a.s.o. 
{ 
    public string Street { /* you know what comes here */ } 
    public string ZipCode { /* ... */ } 
    public string City { /* ... */ } 

    /* more properties */ 
} 

public class Person : ViewModelBase 
{ 
    public string Name { /* ... */ } 

    public Address Address { /* ... */ } 
} 
+0

感謝您的反饋 我的意思是,而不是有一個ObservableCollection 我將有一個ObservableCollection 。我的錯:) –

+0

你認爲在xaml中更好的綁定ViewModel而不是Model。 –

+0

那麼這取決於觀點或模式。可能有一些場景(例如小應用程序),在這些場景中創建虛擬機並不值得。但是如果你堅持使用MVVM ......是的......這是唯一的方法。這是基本機制之一。 – DHN