Построение ViewModel - PullRequest
       6

Построение ViewModel

1 голос
/ 16 июля 2010

Привет, у меня есть ViewModel для категории товаров.В ProductCategory есть логическое поле Active.

Возможно ли иметь одну ProductCategoryViewModel и иметь возможность получить коллекцию всех ProductCategories и коллекцию ACTIVE ProductCategories?

Или, если бы я имелсоздать ActiveProductCategoryViewModel?

Я использую MVVM-Light с RIA в Silverlight ... поэтому у меня есть служба ProductCategory с методом GetProductCategories и методом GetActiveProductCategories.Я хочу, чтобы я мог получить ActiveProductCategories для заполнения выпадающего списка ... но также получить ВСЕ ProductCategories для обслуживания и исторических целей и т. Д.

Спасибо!Butcher

1 Ответ

1 голос
/ 20 июля 2010

Я полагаю, у вас есть другая 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();
        }
    }
}
...