У меня есть коллекция Model-объектов в моей модели ViewModel. Я хотел бы иметь возможность привязать TabControl к ним и использовать DataTemplate для извлечения информации из объектов Model. Когда я пытаюсь это сделать, я получаю errormessage: Невозможно передать объект типа Model объекту типа TabItem. Пробыв некоторое время в поисках решения я нашел следующее:Привязать Silverlight TabControl к коллекции
The Silverlight TabControl является сломана. Используйте комбинацию ListBox и ContentControl для имитации поведения TabControl . (Значит , что у меня есть к коже в ListBox, чтобы выглядеть как TabControl)
TabControl не отменяет PrepareContainerForItemOverride и решение является сделать Converter. (Не так хорошо, потому что я затем нужно указать тип convertee в конвертер)
Кто-нибудь знает какие-либо лучшее решение?
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();
}
}
Я создал расширенный вкладок, который не нужен преобразователь и работает правильно с классом ObservableCollection. http://vortexwolf.wordpress.com/2011/04/09/silverlight-tabcontrol-with-data-binding/ – vorrtex