0

私は2つのWPFアプリケーションを持っていComboBox
ます最初のものを選択すると、最初のコンボボックスに関連するアイテムが2番目のものに取り込まれます

これが私の選択したプロパティです

   public string SelectedApplication
    {
        set
        {
            if (_selectedApplication == value) return;
            this._selectedApplication = value;

            InitializeTransactionTypes();


        }
        get
        {
            return this._selectedApplication;
        }

    }

ここでは、2 つのコンボボックス間で一致する ID をチェックして、2 番目のコンボボックス項目を設定しています。

    ObservableCollection<TransactionTypeViewModel> _transTypeObsList = new ObservableCollection<TransactionTypeViewModel>();
       private void InitializeTransactionTypes()
    {
        if (_selectedApplication != null)
        {

              var getAppCode =
                ApplicationVModel.GetAllApplications()
                                 .FirstOrDefault(apps => apps.Name == _selectedApplication);

            var transTypeList = TransactionTypeVModel.GetAllViewModelTransTypes()
                                                     .Where(t => getAppCode != null && t.Id == getAppCode.Id);

            transactionTypes = new ObservableCollection<TransactionTypeViewModel>(transTypeList);

            NotifyPropertyChanged("TransactionTypes");
        }
    }

メソッドの詳細:

モデルのリストからマッピングされた VM のリスト

       public List<TransactionTypeViewModel> GetAllViewModelTransTypes()
    {
        TransactionTypeViewModels =   TransactionTypeModel.GetAllTransactionTypes().Select(transType => new TransactionTypeViewModel
        {
            Id = transType.Id,
            Name = transType.Name,


        })
    .ToList();
        return TransactionTypeViewModels;
    }

最初のコンボボックスに {A,B,C,D} が含まれていることを選択し、2 番目のコンボボックスに {A'1,A'2,A'3} が含まれているとします。アイテム。{A'1 for A} {B'1 for B} ...などだけを表示したかったのですが、今は {A'1 A'1 A'1 ..... for A} {B' です。 1 B'1 B'1 ....for B} を選択するたびに。

以前の選択をクリアして、選択ごとに新しいリストを表示したい。ありがとう

4

1 に答える 1

0

コメントをまとめます。ObservableCollection何かが変更されるたびに新しいものを作成する代わりに、既存のものを再利用すると、UI に変更が通知されます。次のInitializeTransactionTypesようになります。

private void InitializeTransactionTypes()
{
  if (_selectedApplication != null)
  {
        var getAppCode =
          ApplicationVModel.GetAllApplications()
                           .FirstOrDefault(apps => apps.Name == _selectedApplication);

      transactionTypes.Clear();
      foreach(var transactionItem in TransactionTypeVModel.GetAllViewModelTransTypes().Where(t => getAppCode != null && t.Id == getAppCode.Id))
         transactionTypes.Add(transactionItem);
  }
}

TransactionTypesこのように、変更について通知する必要はもうありません

于 2013-06-21T15:11:07.937 に答える