我有一个WPF TabControl与两个TabItems。每个TabItem都包含一个带有独立ObservableCollection作为其ItemsSource的ListBox。每个ListBox都有一个不同的ItemTemplate。应用程序崩溃改变选项卡包含ListBoxes与ItemTemplates
无论我在启动时选择哪个TabItem,该选项卡都会显示正常,但是当我点击其他选项卡时,应用程序崩溃时会出现'调用目标引发异常'错误指向向我要切换到的选项卡的DataTemplate。
如果我从选项卡上的列表框中删除ItemTemplate我试图切换到(并使用DisplayMemberPath)一切工作正常。
但是,如果我使用DataTemplate,无论它是内联还是StaticResource或DynamicResource,它都会导致标签切换崩溃。
任何想法?伪代码如下:
<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>
公共窗口1() { 的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));
}
我挖入栈跟踪,发现我的愚蠢错误。两个DataTemplates每个都使用具有非常类似属性的自定义控件。我已经将自定义控件1的DependencyProperty代码复制并粘贴到自定义控件2,但忘记更改它所注册的类型。 – bjh 2008-12-01 15:29:12