如何清除所选项目集合

时间:2013-06-21 01:54:08

标签: wpf mvvm

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

这是我的选择属性

   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},当我从第一个Combobox中选择第二个项目时combobo不断填充 项目。我想只显示{A'1代表A} {B'1代表B} ......等等,但现在它的作用是{A'1 A'1 A'1 .....代表A} {B'每个选择1 B'1 B'1 .... for B}。

我希望清除之前的选择并在每个选择中显示一个新列表。感谢

1 个答案:

答案 0 :(得分:0)

总结评论。每次更改时都会重新使用您已经拥有的新ObservableCollection而不是创建新的InitializeTransactionTypes,它会通知UI有关更改。您的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

并且像这样,您不必再通知{{1}}更改