I am trying to set the content of a TabItem to be that of a UserControl on a button press, however it throws an exception - "Exception thrown: 'System.InvalidCastException' in System.Private.CoreLib.dll".
The odd thing is despite throwing the exception it still appears to add the tab.
My Code:
public void AddTabItem(ref TabItem tabItem, string title, UserControl view)
{
if (tabItem == null)
{
tabItem = new TabItem();
tabItem.Header = title;
tabItem.Content = view;
MainTabControl.Items.Add(tabItem); - this line giving the error
}
MainTabControl.SelectedItem = tabItem;
}
public void ClickHandler(object sender, RoutedEventArgs e)
{
var source = e.Source as Control;
switch (source.Name)
{
case "AddClientBtn":
ClientView clientView= new ClientView();
ClientViewModel clientViewModel = new ClientViewModel();
clientView.DataContext = clientViewModel;
AddTabItem(ref addClientTabItem, "Add Client", clientView);
break;
default:
break;
}
e.Handled = true;
}
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:MyProject.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="MyProject.Views.ClientView"
x:DataType="vm:ClientViewModel">
<Design.DataContext>
<vm:ClientViewModel />
</Design.DataContext>
<StackPanel>
<ListBox ItemsSource="{Binding Clients}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}" Margin="0,0,10,0"/>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<DataGrid x:Name="testGrid" Margin="20" ItemsSource="{Binding Clients}"
AutoGenerateColumns="True"
GridLinesVisibility="All"
BorderThickness="1" BorderBrush="Gray" Grid.Row="2" Grid.Column="0"
HeadersVisibility="All">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Width="*" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Width="*" Binding="{Binding LastName}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</UserControl>