我有一個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