Ich habe eine Sammlung von Model-Objekten in meinem ViewModel. Ich möchte in der Lage sein, ein TabControl an diese zu binden und eine DataTemplate zu verwenden, um die Information aus den Model-Objekten zu extrahieren. Wenn ich das versuche, erhalte ich die Fehlermeldung: Das Objekt vom Typ Model kann nicht in ein Objekt vom Typ TabItem umgewandelt werden. Nachdem er fand einige Zeit auf der Suche nach einer Lösung, ich folgendes:Eine Silverlight TabControl an eine Sammlung binden
The Silverlight TabControl ist gebrochen. Verwenden Sie eine Kombination aus ListBox und ContentControl, um das Verhalten eines TabControls nachzuahmen. (Mittel , dass ich die List-Box, um die Haut muß aussehen wie ein TabControl)
TabControl enthebt nicht PrepareContainerForItemOverride und die Lösung ist einen Converter zu machen. (Nicht so gut, weil ich dann den Typ des convertee im Konverter angeben müssen)
kennen Wer noch keine bessere Lösung?
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();
}
}
ich die erweiterte Registerkarte erstellt haben, die nicht einen Konverter benötigt und korrekt funktioniert mit der ObservableCollection-Klasse. http://vortexwolf.wordpress.com/2011/04/09/silverlight-tabcontrol-with-data-binding/ – vorrtex