J'ai une collection d'objets-modèles dans mon ViewModel. Je voudrais pouvoir lier un TabControl à ceux-ci et utiliser un DataTemplate pour extraire les informations des objets Model. Quand j'essaye de faire ceci je reçois le message d'erreur: Impossible de convertir l'objet de type Model en objet de type TabItem. Après avoir passé quelque temps à la recherche d'une solution que je trouve les suivantes:Lier un SilverControl TabControl à une collection
Le Silverlight TabControl est cassé. Utilisez une combinaison de ListBox et ContentControl pour imiter le comportement d'un TabControl. (Moyens que je dois à la peau ListBox à ressembler à un TabControl)
TabControl ne remplace pas PrepareContainerForItemOverride et la solution est de faire un Converter. (Pas si bon parce que je alors besoin de spécifier le type de convertee dans le convertisseur)
Quelqu'un sait une meilleure solution?
XAML
<sdk:TabControl ItemsSource="{Binding Items, ElementName=MyControl}">
<sdk:TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</sdk:TabControl.ItemTemplate>
</sdk:TabControl>
C#
public ObservableCollection<Model> Items { get; set; }
public ViewModel()
Items = new ObservableCollection<Model>{
new Model { Name = "1"},
new Model { Name = "2"},
new Model { Name = "3"},
new Model { Name = "4"}
};
}
public class TabConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<TabSource> source = value as List<TabSource>;
if (source != null)
{
List<TabItem> result = new List<TabItem>();
foreach (TabSource tab in source)
{
result.Add(new TabItem()
{
Header = tab.Header,
Content = tab.Content
});
}
return result;
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
J'ai créé le contrôle onglet étendu qui n'a pas besoin d'un convertisseur et fonctionne correctement avec la classe ObservableCollection. http://vortexwolf.wordpress.com/2011/04/09/silverlight-tabcontrol-with-data-binding/ – vorrtex