2013-06-21 3 views
0

J'ai une application WPF avec deux ComboBox
Lorsque je sélectionne le premier les éléments liés à la première combobox seront renseignés sur la deuxièmeComment effacer les éléments sélectionnés collection

Voici ma sélection Propriété

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

      InitializeTransactionTypes(); 


     } 
     get 
     { 
      return this._selectedApplication; 
     } 

    } 

ici je vérifie un id correspondant entre les deux comboboxes pour peupler les éléments de la deuxième liste déroulante.

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"); 
     } 
    } 

Plus d'informations sur les méthodes:

Liste des VM mis en correspondance de la liste des modèles

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


     }) 
    .ToList(); 
     return TransactionTypeViewModels; 
    } 

Disons que je sélectionner d'abord {a combobox A, B, C, D ...} et la deuxième combobox a {A'1, A'2, A'3}, quand je sélectionne l'élément de la première Combobox, le second combobo continue de remplir éléments. Je voulais montrer seulement {A'1 pour A} {B'1 pour B} ... etc mais maintenant ce qu'il fait c'est {A'1 A'1 A'1 ..... pour A} {B ' 1 B'1 B'1 .... pour B} pour chaque sélection.

Je veux que la sélection précédente soit effacée et affiche une nouvelle liste par sélection. Merci

+0

Au lieu de recréer '_transTypeObsList' chaque fois dans' 'essayer de InitializeTransactionTypes' Clear() 'et' Ajouter (...) 'éléments un par un. – dkozl

+1

pour être clair Je ne sais pas si c'est le problème mais vous créez votre liste à souvent. Au lieu de cela 'transactionTypes = new ObservableCollection ....' faire quelque chose comme 'transactionTypes.Clear(); foreach (....) transactionTypes.Add (....) ' – dkozl

+0

@dkozl Merci cela fonctionne pour moi ... J'ai effacé et ajouter pour chaque itération. –

Répondre

0

Pour résumer les commentaires. Au lieu de créer de nouveaux ObservableCollection chaque fois que quelque chose change, réutilisez-en un que vous avez déjà et il avertira l'interface utilisateur des modifications. Votre InitializeTransactionTypes devrait ressembler à ceci:

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); 
    } 
} 

et comme cela, vous ne devriez pas avoir à en informer au sujet TransactionTypes change plus

+0

merci c'est un bon point –

Questions connexes