2010-07-16 45 views
1

問候, 我有一個ProductMategory的ViewModel。產品類別有一個布爾活動字段。構建一個ViewModel

是可以擁有一個ProductCategoryViewModel並能夠獲得所有ProductCategories的集合和ACTIVE ProductCategories的集合嗎?或者,我會不得不創建一個ActiveProductCategoryViewModel?我使用Silverlight中的RIA使用MVVM-Light ...所以,我有一個GetCroductCategories方法和一個GetActiveProductCategories方法的ProductCategory服務。我希望能夠獲得ActiveProductCategories以填充下拉列表...但也獲取所有ProductCategories用於維護和歷史用途等。

謝謝! 屠夫

回答

1

我假設你有另一個ViewModel與ProductCategoryViewModel對象的集合?如果是這樣,我認爲可以有另一個只有活躍的產品類別的集合。我不確定您需要單獨的服務方法,因爲您可以根據Active值過濾您的產品類別集合。

如果這個視圖模型將被稱爲ProductCategoriesViewModel,它可能是這樣的:

using System.Collections.Generic; 
using System.Linq; 
using GalaSoft.MvvmLight; 

namespace OCEAN.EPP.ViewModel 
{ 
    public class ProductCategoriesViewModel : ViewModelBase 
    { 
     public ProductCategoriesViewModel() 
     { 
      if (IsInDesignMode) 
      { 
       ProductCategories = new List<ProductCategoryViewModel> 
       { 
        new ProductCategoryViewModel { Active = false }, 
        new ProductCategoryViewModel { Active = false }, 
        new ProductCategoryViewModel { Active = true }, 
        new ProductCategoryViewModel { Active = true }, 
       }; 
      } 
      else 
      { 
       // Code runs "for real": Connect to service, etc... 
      } 
     } 

     public const string ProductCategoriesPropertyName = "ProductCategories"; 
     private List<ProductCategoryViewModel> _productCategories = new List<ProductCategoryViewModel>(); 
     public List<ProductCategoryViewModel> ProductCategories 
     { 
      get { return _productCategories; } 
      set 
      { 
       if (_productCategories == value) 
        return; 

       _productCategories = value; 
       FilterActiveProductCategories(); 
       RaisePropertyChanged(ProductCategoriesPropertyName); 
      } 
     } 

     public const string ActiveProductCategoriesPropertyName = "ActiveProductCategories"; 
     private List<ProductCategoryViewModel> _activeProductCategories = new List<ProductCategoryViewModel>(); 
     public List<ProductCategoryViewModel> ActiveProductCategories 
     { 
      get { return _activeProductCategories; } 
      set 
      { 
       if (_activeProductCategories == value) 
        return; 

       _activeProductCategories = value; 
       RaisePropertyChanged(ActiveProductCategoriesPropertyName); 
      } 
     } 

     private void FilterActiveProductCategories() 
     { 
      ActiveProductCategories = ProductCategories.Where(pc => pc.Active).ToList(); 
     } 
    } 
}