2010-05-21 30 views
1

我有像Customer:Order:Product這樣的聚合模型。MVVM/WPF:在域模型中使用ObservableCollection <T>作爲列表,是好還是壞?

至於我的觀點是必然具有類型的ObservableCollection的房產客戶的BillingViewModel

和一個客戶在此集合中有一個名爲的ObservableCollection

,一個爲了這個集合訂單 的「清單」有一個產品名單 名爲ObservableCollection

那麼我需要ObservableCollection的數據綁定,但是如果域模型真的有一個ObservableCollection?通常它有一個

列表或IEnumerable!

這是壞習慣還是有副作用?

我上面的追加什麼是正確的解釋到:

class Customer 
{ 
    int CustomerID {get;set;} 
    ObservableCollection<Order> { get;set;} 
} 

class BillingViewModel 
{ 
    ObservableCollection<Customer> _customers; 

public BillingViewModel() 
{ 

    Customers= GetAggregatedCustomersOrdersProductsFromRepository(); 

} 

public ObservableCollection<Customer> Customers 
{ 
    get{ return _customers;} 
    set 
{ 
    _customers = value; 
    this.RaisePropertyChanged("Customers"); 

} 
} 

} 

我現在希望它更加清晰!我在ViewModel和Model中有ObservableCollection!

回答

0

這取決於這些屬性是否需要內置更改通知。如果你有某種邏輯取決於在這些狀態改變時做某件事情,那麼它很好。如果只有它支持數據綁定,並且該類本身不是ViewModel,那麼我認爲這是糟糕的形式。

+0

沒有邏輯。我只是在視圖中添加一個訂單,在我的BillingViewModel中,CurrentOrder被添加到SelectedCustomer中,如 SelectedCustomer.Orders.Add(CurrentOrder); 然後我的訂單的DataGrid立即更新。 使用列表視圖中沒有更新:/ 那麼,我可以對你說的不良形式做些什麼......? – msfanboy 2010-05-21 18:07:53

+0

如果您的BillingViewModel正在使用ObservableCollection,那麼沒有任何問題。只有當您的對象不與視圖交互時纔會讓它們成爲不正確的形式。 – Tejs 2010-05-21 18:17:14

+0

啊不,你誤會我了!我更新了我的第一篇文章! – msfanboy 2010-05-21 18:38:37

1

從我讀過的例子中可以看出,一種做法是在您到達客戶端時將您的域模型Customer:Order:Product重新排列到MainViewModel:CustomerViewModel:OrderViewModel:ProductViewModel中。這將允許您標記任何虛擬機髒並僅在需要時保存。它也可以讓你編寫你自己的虛擬機驅動的許多視圖視圖,所以如果你以後決定將視圖從一個大屏幕變成多個視圖,它將是相當無縫的。 MainViewModel的原因更多的是控制器,然後是ViewModel,它的職責是獲得域模型並將其分解到虛擬機中,並且可能是控制器如何顯示視圖(分組或模態),它也可以包含諸如SaveAllDirty之類的命令。

+0

我不需要那些「髒」的東西。當用戶輸入數據後按下命令時,我的數據將被保存。 「...並將其重新排列成MainViewModel:CustomerViewModel:OrderViewModel:ProductViewModel ...」 這是我之前做的,它的總開銷... – msfanboy 2010-05-22 16:58:20