我有一个WPF的TabControl具有两个的TabItems。每个TabItem的包含一个独立的ObservableCollection作为其的ItemsSource一个列表框。每个列表框都有不同的ItemTemplate。

其中的TabItem我设置在启动时将被选择不管,该选项卡将被显示很好,但是当我点击其他标签上与应用程序崩溃错误朝向指向“异常已被调用的目标抛出”在DataTemplate中为我切换到标签。

如果我从我试图切换到选项卡上的ListBox中删除的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));

}

有帮助吗?

解决方案

  

其中的TabItem我设置在启动时将被选择不管,该选项卡将被显示很好,但是当我点击其他标签上与应用程序崩溃错误朝向指向“异常已被调用的目标抛出”所述的DataTemplate用于我切换到标签。

启用第一个机会异常,这样你就可以找出实际的异常,而不是包裹外例外 - 什么错将更加清晰

其他提示

我认为问题是,这两个列表框的的ItemSource =“{结合}”。我觉得这个说绑定到窗口的DataContext的,但在代码中设置了单独。

在您的Window.Resources尝试声明CollectionViewSource(或两个,如果你想列表框之间的不同种类)。设置您的ObservableCollection作为的CollectionViewSource的来源。

然后在你的列表框,不要结合的CollectionView源。

如果这不起作用,你可以尝试把每一个列表框和其相关的数据资源到单独的用户控件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top