2010-07-16 47 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(); 
     } 
    } 
}