1

您好,我有一个 ProductCategory 的 ViewModel。ProductCategory 有一个布尔值 Active 字段。

是否有可能拥有一个 ProductCategoryViewModel 并能够获得所有 ProductCategories 的集合和 ACTIVE ProductCategories 的集合?

或者,我是否必须创建一个 ActiveProductCategoryViewModel?

我在 Silverlight 中使用带有 RIA 的 MVVM-Light ...所以,我有一个 ProductCategory 服务,它带有一个 GetProductCategories 方法和一个 GetActiveProductCategories 方法。我希望能够让 ActiveProductCategories 填充下拉列表......但也可以获得所有 ProductCategories 用于维护和历史目的等。

谢谢!屠夫

4

1 回答 1

1

我假设您有另一个带有 ProductCategoryViewModel 对象集合的 ViewModel?如果是这样,我认为拥有另一个仅包含有效产品类别的集合是很好的。我不确定您是否需要为此使用单独的服务方法,因为您可以根据 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();
        }
    }
}
于 2010-07-20T14:59:05.157 回答