Ok travaillé avec WPF pendant un moment, mais j'ai besoin d'aide.WPF ComboBox SelectedItem
J'ai un ComboBox
comme ci-dessous:
<TabControl>
<TabItem Header="1">
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>
Chaque fois que je me éloigne de l'onglet 1 et puis de revenir sur elle la sélection se retire. Je pense que la raison en est que les contrôles sont détruits quand ils sortent de la portée et puis de retour. Mais dans le processus de cela SelectedItem devient null ce qui n'est pas vraiment ce que l'utilisateur voulait, c'est un événement dû à l'interface utilisateur cycle de la vie. Donc, je me demande quel est le meilleur itinéraire à suivre? Je construis cette application avec MVVM pour que je puisse ignorer un appel sur la propriété MyListSelection dans mon ViewModel mais j'ai des ComboBox partout et je n'aime pas modifier mon ViewModel pour ce que je considère comme un bug de WPF.
Je pourrais sous-classer le WPF ComboBox, mais il n'y a aucun événement SelectedItemChanging Je peux seulement ajouter un gestionnaire quand SelectedItem a changé.
Des idées?
MISE À JOUR:
D'accord, après avoir battu la tête contre le mur, j'ai découvert pourquoi mon problème ne pouvait pas se reproduire. Si le type d'élément de liste est une classe pour une raison quelconque, SelectedItem est défini par WPF sur null mais s'il s'agit d'un type de valeur, ce n'est pas le cas.
ici est ma classe de test (VMBase est juste une classe abstraite qui implémente INotifyPropertyChanged):
public class TestListViewModel : VMBase
{
public TestListViewModel()
{
TestList = new List<TestViewModel>();
for (int i = 0; i < 10; i++)
{
TestList.Add(new TestViewModel(i.ToString()));
}
}
public List<TestViewModel> TestList { get; set; }
TestViewModel _SelectedTest;
public TestViewModel SelectedTest
{
get { return _SelectedTest; }
set
{
_SelectedTest = value;
OnPropertyChanged("SelectedTest");
}
}
}
public class TestViewModel : VMBase
{
public string Name {get;set;}
}
Alors, quand je change TestList de type int et des allers-retours entre les onglets SelectedItem reste le même. Mais quand il est de type TestViewModel
SelectedTest est mis à null lorsque le tabitem est flou.
Que se passe-t-il?
Lorsque le type de liste est un type de référence, il ne se comporte pas de la même manière. Voir ma mise à jour – Jose