Il existe plusieurs façons. Une façon est d'écrire un ViewModel pour votre classe Flight et de remplir une collection avec ces objets "FlightViewModel". Ce ViewModel peut contenir tous les objets hérités de "Flight". Si vos classes "InFlight" et "OutFlight" ne sont pas si complexes, je les placerais dans un ViewModel (ici le "FlightViewModel").
public class FlightViewModel : INotifyPropertyChanged
{
public Flight Flight { get; set; }
public int PropertyYouNeedForInFlight { get; set; }
public string PropertyYouNeedForOutFlight { get; set; }
}
Une autre façon est d'utiliser une collection d'un certain type de ViewModel de base comme la zone de liste ItemsSource. Cette collection contient des ViewModels de type "InFlightViewModel" et d'autres de type "OutFlightViewModel". Pour vos éléments ListBox, vous pouvez écrire un ItemTemplateSelector qui choisit le ItemTemplate correct pour le type de l'élément.
public class MainWindowViewModel
{
public ObservableCollection<ViewModelBase> Flights { get; set; }
public MainWindowViewModel()
{
Flights = new ObservableCollection<ViewModelBase>();
Flights.Add(new InFlightViewModel());
Flights.Add(new OutFlightViewModel());
}
}
public class FlightTemplateSelector : DataTemplateSelector
{
public DataTemplate InFlightTemplate { get; set; }
public DataTemplate OutFlightTemplate { get; set; }
public override DataTemplate SelectTemplate(object item,
DependencyObject container)
{
if(item.GetType() == typeof(InFlight))
return InFlightTemplate;
if(item.GetType() == typeof(OutFlight))
return OutFlightTemplate
//Throw exception or choose some random layout
throw new Exception();
}
}
<local:FlightTemplateSelector
x:Key="FlightTemplateSelector">
<local:FlightTemplateSelector.InFlightTemplate>
<!-- Define your layout here -->
</local:FlightTemplateSelector.InFlightTemplate>
<!-- Define your layout here -->
<local:FlightTemplateSelector.OutFlightTemplate>
</local:FlightTemplateSelector.OutFlightTemplate>
</local:FlightTemplateSelector>
Vous voulez un ViewModel pour les éléments de la zone de liste correcte? – Andre
Un petit exemple de code aiderait. –
Si votre ViewModel contient ceci comme une liste de sources ListBox ListBoxSource; Qu'est-ce qui va pas avec ça? –