2010-11-24 6 views
1

Dans mon xaml, j'ai un ListBox de clients sur la gauche. Lorsqu'un client est sélectionné, le droit affiche les informations sur le client (nom, adresse, téléphone, type, etc.) dans une zone de texte de liaison ou une zone de liste déroulante.WPF Combobox Liaison d'enregistrements SelectionChanged

À droite, le Type est une liste déroulante dont l'événement SelectionChanged remplit quelque chose lorsque la valeur est modifiée. Le problème est que chaque fois que je sélectionne un client différent dans le ListBox sur la gauche, l'événement Type SelectionChanged se déclenche également et remplit la valeur. Comment puis-je détecter et empêcher cela? Merci!

Répondre

0

Cela ne semble pas être un problème complexe, mais il n'a pas été bien décrit. Pourriez-vous donner un meilleur exemple?

Utilisez-vous le modèle MVVM? J'imagine que vous pouvez décomposer la vue en plusieurs modèles Views et View, par exemple un "CustomersListViewModel" et un "CustomerDetailsViewModel".

Vous pouvez lier le ListBox à une collection de clients et définir le "SelectItem" à une propriété appelée "SelectedCustomer" (dans CustomersListViewModel), puis lorsque la sélection est modifiée dans CustomersListBox, il déclenche une méthode appelée " SelectedCustomerChanged "ou quelque chose de similaire qui serait essentiellement nouveau jusqu'à" CustomersDetailsViewModel "(en passant le client sélectionné en tant que paramètre) et cela afficherait les nouveaux CustomerDetails.

Il me semble que vous avez une seule vue qui permute un client, ce qui aurait pour effet de déclencher l'événement selectionchanged sur votre combobox, provoquant votre problème. tion des clients

Exemple:

CustomersListViewModel

  • Les clients BindableCollection (lié à ListBox)
  • SelectedCustomer client (lié à ListBox SelectedItem)
  • CustomerDetailViewModel CustomerDetailViewModel (lié à un ContentControl)
  • SelectedCustomerChanged (Fired sur ListBox SelectionChanged Event)

CustomerDetailViewModel (Accepte un objet client dans le constructeur params)

  • de CurrentCustomer client (Bind contrôles aux propriétés sur cette objet client)

La méthode "SelectedCustomerChanged" ressemblerait à ceci:

public void SelectedCustomerChanged() 
{ 
    this.CustomerDetailViewModel = new CustomerDetailViewModel(this.SelectedCustomer) 
    // Replace this with some activation of view code? 
    this.ActivateViewModel(this.CustomerDetailViewModel) 
} 

Ce serait mon approche?

Merci, J'espère que cela vous aide.

Ben

+0

Salut Ben, je ne suis pas en utilisant modèle MVVM. C'est une application WPF utilisant EF pour les données. Je charge la Listbox avec les clients. Lorsqu'un client est sélectionné, le DataContext de Windows est défini sur SelectedItem.Je crois que l'événement ComboBox SelectionChanged s'est déclenché parce que le type change chaque fois qu'un nouveau client est sélectionné. Je dois savoir comment empêcher l'exécution de ComboBox SelectionChanged lorsque la modification ne provient pas directement de la liste déroulante ComboBox. – Seecott

Questions connexes