Ok ho lavorato con WPF per un po ', ma ho bisogno di aiuto.WPF ComboBox SelectedItem
Ho un ComboBox
come di seguito:
<TabControl>
<TabItem Header="1">
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>
Ogni volta che mi allontano dal 1 scheda e poi tornare ad esso la selezione viene rimosso. Penso che la ragione sia che i controlli vengono distrutti quando escono dal campo di applicazione e poi rientrano. Ma in questo caso l'oggetto SelectedItem diventa null che non è proprio ciò che l'utente desiderava, è un evento dovuto all'interfaccia utente ciclo vitale.
Quindi mi chiedo quale sia la strada migliore da percorrere? Sto costruendo questa app con MVVM in modo da poter ignorare una chiamata impostata nella proprietà MyListSelection nel mio ViewModel ma ho i ComboBox dappertutto e non mi piace modificare il mio ViewModel per quello che considero un bug di WPF.
Potrei sottoclasse il ComboBox WPF, ma non c'è un evento SelectedItemChanging Posso solo aggiungere un gestore quando SelectedItem è cambiato.
Qualche idea?
UPDATE:
Ok, dopo aver battuto la testa contro il muro ho scoperto perché il mio problema non riusciva a riprodurre. Se il tipo di elemento dell'elenco è una classe per qualche motivo, l'oggetto SelectedItem viene impostato da WPF su null ma se è un tipo di valore non lo fa.
ecco la mia classe di test (VMBase è solo una classe astratta che implementa 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;}
}
Così quando cambio TestList di tipo INT e andare avanti e indietro tra le schede SelectedItem rimane lo stesso. Ma quando è di tipo TestViewModel
SelectedTest viene impostato su null quando il tabitem diventa sfocato.
Cosa sta succedendo?
Quando il tipo di elenco è un tipo di riferimento, non si comporta allo stesso modo. Vedere il mio post aggiornato – Jose