Définir par programmation ComboBox SelectedItem en WPF (3.5sp1)
J'ai été confondu pendant le réglage SelectedItem programmaticaly dans les applications wpf avec Net Framework 3.5 sp1 est installé. J'ai lu attentivement sur les centaines de posts \sujets, mais encore confus((
Mon xaml:
<ComboBox name="cbTheme">
<ComboBoxItem>Sunrise theme</ComboBoxItem>
<ComboBoxItem>Sunset theme</ComboBoxItem>
</ComboBox>
Si j'ajoute IsSelected="True" propriété dans l'un des éléments - c'est dosn pas jeux de cet élément. POURQUOI ?
Et j'ai été essayer différents dans le code et ne peut toujours pas régler l'élément sélectionné:
cbTheme.SelectedItem=cbTheme.Items.GetItemAt(1); //dosn't work
cbTheme.Text = "Sunrise theme"; //dosn't work
cbTheme.Text = cbTheme.Items.GetItemAt(1).ToString();//dosn't work
cbTheme.SelectedValue = ...//dosn't work
cbTheme.SelectedValuePath = .. //dosn't work
//and even this dosn't work:
ComboBoxItem selcbi = (ComboBoxItem)cbTheme.Items.GetItemAt(1);//or selcbi = new ComboBoxItem
cbTheme.SelectedItem = selcbi;
La SelectedItem n'est pas en lecture seule propriété, alors pourquoi il wan fonctionne pas?
Je pense que c'est doit être de Microsoft, des problèmes, pas mon. Ou j'ai raté quelque chose??? J'ai essayer de jouer avec ListBox, et tous fonctionnent très bien avec le même code, je peux créer des sélections, obtenir des sélections et ainsi de suite.... Que puis-je faire avec ComboBox ? Peut-être que certains trucs ???
- Hey @Victor, vous devez sélectionner ihatemash réponse
Vous devez vous connecter pour publier un commentaire.
Pour sélectionner un élément dans la
ComboBox
et à la définir par défaut de l'élément sélectionné, utilisez la ligne ci-dessous:Si j'ajoute la zone de liste déroulante et les éléments de la programmation, cela fonctionne pour moi:
Il fonctionne également si l'ensemble de la
ItemSource
propriété de la programmation, puis définir le texte à la valeur sélectionnée.Créer une propriété publique dans votre viewmodel pour la liste des thèmes et un pour l'élément sélectionné:
lier votre zone de liste déroulante dans le code xaml pour les propriétés de ce type:
maintenant tout ce que vous faire est d'ajouter des éléments à la ThemeList pour remplir la zone de liste déroulante. Pour sélectionner un élément dans la liste, définissez la propriété sélectionnée pour le texte de l'élément sélectionné comme ceci:
ou essayer le réglage de l'élément sélectionné de la chaîne de valeur de l'élément que vous souhaitez utiliser dans votre code si vous souhaitez utiliser le code que vous avez actuellement - vous ne savez pas si cela va fonctionner, mais vous pouvez essayer.
Si vous connaissez l'index de l'élément que vous souhaitez définir, dans ce cas, il semble que vous essayez de définir l'indice de
1
, il vous suffit de faire:J'ai constaté que quand vous ne savez pas à l'index, c'est quand vous avez le vrai problème. Je sais que cela va au-delà de la question d'origine, mais pour les Googlers, sur ce compte, que voulez-vous savoir comment définir l'élément lorsque l'indice n'est pas connue, mais la valeur que vous souhaitez afficher EST connu, si vous remplissez votre liste déroulante avec un
ItemSource
à partir d'unDataTable
, par exemple, vous pouvez obtenir de l'index en faisant ceci:Et alors vous n'avez tout simplement
cbTheme.SelectedIndex = matchedIndex;
.Similaire itération de
ComboBoxItem
objets plutôt que de lesDataRow
lignes pourrait donner un résultat similaire, si leComboBox
était rempli de la façon dont les OP montre, à la place.Est la zone de liste déroulante liée aux données?
Si oui, vous êtes probablement mieux de le faire par le biais de la Liaison plutôt que du code ....
Voir cette question ... WPF ListView par programmation Sélectionner un Élément
Peut-être créer un nouveau SelectableObject {Texte = "Abc Thème", IsCurrentlySelected = True}
Lier une collection de SelectableObjects à la zone de liste déroulante.
Essentiellement réglage de la IsCurrentlySelected propriété dans le modèle, et l'INTERFACE utilisateur mise à jour du Modèle.
Selon Réponse 4
Si vous avez déjà ajouter les Éléments dans l'Élément source.
Feu le PropertyChangedEvent de la selectet Valeur.