2 つの TabItems を持つ WPF TabControl があります。各 TabItem には、個別の ObservableCollection を ItemsSource として持つ ListBox が含まれています。各 ListBox には異なる ItemTemplate があります。
起動時に選択するように設定した TabItem に関係なく、そのタブは正常に表示されますが、他のタブをクリックすると、DataTemplate を指している「呼び出しのターゲットによって例外がスローされました」というエラーでアプリケーションがクラッシュします切り替え先のタブ。
タブの ListBox から ItemTemplate を削除すると、切り替えようとしている (そして DisplayMemberPath を使用している) 場合、すべて正常に動作します。
ただし、インラインであるか、StaticResource または DynamicResource であるかに関係なく、DataTemplate を使用すると、タブの切り替え時にクラッシュが発生します。
何か案は?擬似コードは次のとおりです。
<Window x:Class="Example.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:objects="clr-namespace:Example.CoreObjects"
xmlns:controls="clr-namespace:Example.Controls"
>
<Window.Resources>
<DataTemplate x:Key="ItemTemplateOne">
<controls:CustomControlOne />
</DataTemplate>
<DataTemplate x:Key="ItemTemplateTwo">
<controls:CustomControlTwo />
</DataTemplate>
</Window.Resources>
<Grid>
<TabControl Name="tabControl1">
<TabItem Header="TabOne">
<Grid>
<ScrollViewer>
<ListBox Name="ListBoxOne"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource ItemTemplateOne}"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</ScrollViewer>
</Grid>
</TabItem>
<TabItem Header="TabTwo">
<Grid>
<ScrollViewer>
<ListBox Name="ListBoxTwo"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource ItemTemplateTwo}"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>
</Grid>
public Window1() { InitializeComponent();
ListBoxOne.DataContext = ObservableCollectionOne;
CollectionViewOne = CollectionViewSource.GetDefaultView(ObservableCollectionOne);
CollectionViewOne.SortDescriptions.Add(new SortDescription("SortProperty", ListSortDirection.Descending));
ListBoxTwo.DataContext = ObservableCollectionTwo;
CollectionViewTwo = CollectionViewSource.GetDefaultView(ObservableCollectionTwo);
CollectionViewTwo.SortDescriptions.Add(new SortDescription("SortProperty", ListSortDirection.Descending));
}