-
I am trying to bind tabs with dynamic content to a <TabControl ItemsSource="{Binding Tabs}">
<TabControl.ItemTemplate>
<DataTemplate x:DataType="vm:TabItemViewModel">
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate DataType="vm:TabItemViewModel">
<ContentPresenter Content="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl> public partial class MainWindowViewModel : ViewModelBase
{
public TabItemViewModel[] Tabs { get; set; } =
[
new() { Header = "Tab1", Content = new HomeTabViewModel() },
new() { Header = "Tab2", Content = new SettingsTabViewModel() }
];
} My view model for the tabs looks like this: public class TabItemViewModel
{
public required string Header { get; set; }
public required ViewModelBase Content { get; set; }
} with content view models look like this: public class HomeTabViewModel : ViewModelBase
{
public string Content => "Home Tab Content";
} But I am getting the following System.InvalidCastException: Unable to cast object of type 'AvaloniaTabControlBinding.ViewModels.HomeTabViewModel' to type 'AvaloniaTabControlBinding.ViewModels.TabItemViewModel'. What am I getting wrong/missing? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
I think you want to use a
|
Beta Was this translation helpful? Give feedback.
I think you want to use a
ContentControl
not aContentPresenter
.ContentPresenter
is for use inside of aControlTemplate
when creating aControlTheme
for example Button. Basically if a class has 'Presenter' in the name it is for use with in aControlTemplate
and not for general use in aUserControl
.