0

我有一个带有两个的 WPF 应用程序ComboBox
当我选择第一个时,与第一个组合框相关的项目将填充在第二个组合框上

这是我的选择属性

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

            InitializeTransactionTypes();


        }
        get
        {
            return this._selectedApplication;
        }

    }

在这里,我正在检查两个组合框之间的匹配 id 以填充第二个组合框项。

    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} ...第二个组合框有 {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 回答