2010-12-02 15 views
0

J'ai donc plusieurs comboboxes dans mon application WPF qui ne modifient pas la sélection lorsqu'un utilisateur clique sur le texte d'un élément de zone de liste déroulante. Afin de sélectionner un élément particulier, vous devez cliquer à droite ou à gauche du texte. J'ai une autre liste déroulante qui sélectionne très bien lorsque le texte est cliqué. La seule différence entre les deux est la liaison de données. Les zones de liste déroulante qui ne sélectionnent pas lorsque le texte est cliqué sont databound à une ObservableCollection d'un type ou d'un autre. La liste déroulante qui fonctionne contient des valeurs statiques insérées manuellement.WPF/C# Combobox ne modifie la sélection que lorsqu'un clic est détecté en dehors de la zone de texte

J'ai beaucoup cherché le problème et je n'arrive pas à trouver quelqu'un d'autre qui a eu ce problème ou quelque chose de similaire à distance. Je ne mets aucune propriété étrange.

Voici le code pour l'une des comboboxes problématiques:

<ComboBox HorizontalAlignment="Left" Margin="40,160,0,0" VerticalAlignment="Top" Width="132" ItemsSource="{Binding Path=Systems}" SelectedItem="{Binding Path=System}" SelectedIndex="0"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <ComboBoxItem Content="{Binding Path=Name}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Voici une vidéo du comportement:

http://www.youtube.com/watch?v=D0r1N1ghw-k

Répondre

1

enter code here Supposons que mon ComboBox est defind comme ci-dessous

<ComboBox Name="cmb" Width="200" Height="20" DisplayMemberPath="PersonName" SelectedValuePath="PersonID"> 

    </ComboBox> 

s'il vous plaît remarquer, j'ai enlevé la partie itemtemplate

et mon modèle est comme ci-dessous

public class Person 
{ 
    public string PersonName { get; set; } 

    public string PersonID { get; set; } 
} 

Et ma fixation est dans le code derrière, cette étape est nécessaire, vous pouvez le faire dans le XAML, iam juste vérifier rapidement si le code beaucoup plus sale

public List<Person> source = new List<Person>(); 
    public MainWindow() 
    { 
     InitializeComponent(); 


     for (int i = 0; i < 20; i++) 
     { 
      source.Add(new Person() { PersonID = i.ToString(), PersonName = "Sau" + i.ToString() }); 
     } 
     cmb.ItemsSource = source; 
     this.DataContext = this; 
    } 

donc si vous exécutez cet exemple, vous verrez que vous pouvez sélectionner la valeur lorsque vous cliquez sur le texte lui-même.

c'est la propriété de contenu qui cause un problème mais je ne suis pas sûr à 100% sur ce point.

+0

Cela n'a pas résolu le problème. Il se comporte toujours de la même manière. Y at-il quelque chose que je peux faire pour déboguer un peu mieux? Je ne sais pas si j'ai décrit le problème avec précision, ou si j'ai laissé quelque chose d'important. – Mortilent

+0

édité mon post, s'il vous plaît vérifier la partie de liaison – TalentTuner

+0

Toujours la même chose. En ce qui concerne la liaison, il charge toutes les bonnes données, et je suis également capable de changer la sélection, je ne peux pas changer de sélection à moins que je clique à droite ou à gauche du texte pour cette combobox particulière article. J'ai essayé d'utiliser IsReadOnly et ai eu le même résultat. Cela se passe aussi sur plusieurs machines. – Mortilent