2010-07-16 3 views
1

Salutations, J'ai un ViewModel pour une catégorie de produit. ProductCategory possède un champ booléen Active.Construction d'un ViewModel

Est-il possible d'avoir un seul ProductCategoryViewModel et de pouvoir obtenir une collection de toutes les ProductCategories et une collection de ACTIVE ProductCategories?

Ou, devrais-je créer un ActiveProductCategoryViewModel? J'utilise MVVM-Light avec RIA dans Silverlight ... donc, j'ai un service ProductCategory avec une méthode GetProductCategories et une méthode GetActiveProductCategories. Je veux être en mesure d'obtenir les ActiveProductCategories pour remplir une liste déroulante ... mais aussi obtenir toutes les catégories de produits à des fins de maintenance et historiques, etc.

Merci! Butcher

Répondre

1

Je suppose que vous avez un autre ViewModel avec une collection d'objets ProductCategoryViewModel? Si c'est le cas, je pense que c'est bien d'avoir une autre collection de seulement les catégories de produits actifs. Je ne suis pas sûr que vous ayez besoin d'une méthode de service distincte pour cela, car vous pouvez simplement filtrer votre collection de catégories de produits en fonction de la valeur Active.

Si ce modèle de vue serait appelé ProductCategoriesViewModel, il pourrait ressembler à ceci:

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(); 
     } 
    } 
}