2013-06-21 60 views
0

我有两个ComboBox
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}为每个选择。

我想先前的选择被清除,并显示一个新的列表每个选择。谢谢

+0

而是在'InitializeTransactionTypes'尝试'清除重建'_transTypeObsList'每次() '和'添加(...)'项目一个接一个。 – dkozl

+1

要清楚我不知道这是否是问题,但您经常创建您的列表。而是'transactionTypes = new ObservableCollection ....'做一些类似'transactionTypes.Clear(); foreach(....)transactionTypes.Add(....)' – dkozl

+0

@dkozl谢谢,这对我有用......我清除并添加了每一次迭代。 –

回答

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改变任何更多

+0

谢谢,这是一个很好的观点 –

相关问题