1

こんにちは、ProductCategory の ViewModel があります。ProductCategory にはブール値の Active フィールドがあります。

単一の ProductCategoryViewModel を持ち、すべての ProductCategories のコレクションと ACTIVE ProductCategories のコレクションを取得することは可能ですか?

それとも、ActiveProductCategoryViewModel を作成する必要がありますか?

Silverlight の RIA で MVVM-Light を使用しています...そのため、GetProductCategories メソッドと GetActiveProductCategories メソッドを備えた ProductCategory サービスがあります。ActiveProductCategories を取得してドロップダウンに入力できるようにしたいのですが、メンテナンスや履歴目的などのためにすべての ProductCategories を取得することもできます。

ありがとう!肉屋

4

1 に答える 1

1

ProductCategoryViewModel オブジェクトのコレクションを持つ別の ViewModel があると思いますか? もしそうなら、アクティブな製品カテゴリだけの別のコレクションを用意しても問題ないと思います. アクティブな値に基づいて製品カテゴリのコレクションをフィルタリングするだけなので、これに別のサービス メソッドが必要かどうかはわかりません。

このビュー モデルが 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 に答える