C# 可观测收集崩溃UWP
我一直在处理一个UWP应用程序,它在加载/呈现ListView中有80多个项目的新视图时出现问题。我必须显示很多列(listView中每个项目的属性)。我读过关于虚拟化的文章,但我不确定在这种情况下这是否是正确的方法(似乎更适合于更大的数据集)。应用程序崩溃,没有任何堆栈跟踪或任何有用的东西 在viewModel中,我所做的就是C# 可观测收集崩溃UWP,c#,xaml,uwp,C#,Xaml,Uwp,我一直在处理一个UWP应用程序,它在加载/呈现ListView中有80多个项目的新视图时出现问题。我必须显示很多列(listView中每个项目的属性)。我读过关于虚拟化的文章,但我不确定在这种情况下这是否是正确的方法(似乎更适合于更大的数据集)。应用程序崩溃,没有任何堆栈跟踪或任何有用的东西 在viewModel中,我所做的就是Items=newobservetecollection(products) 这是我的xaml代码: <ScrollViewer HorizontalScrollB
Items=newobservetecollection(products)
这是我的xaml代码:
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Grid.Row="1">
<GridView ItemsSource="{Binding Path=Items, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
Name="NewItemView"
HorizontalAlignment="Stretch"
Margin="0,0,0,0"
Background="White"
Width="{Binding Path=GridWidth, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
<GridView.Header>
<Grid Grid.Row="0"
Background="#FF6FC3E8"
BorderBrush="White"
BorderThickness="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
x:Uid="dataVerifiedSubt"
Width="150"
Style="{StaticResource TextBlockTitleProductsListPage}"
x:Name="dataVerified"></TextBlock>
<ListView Grid.Column="1"
Height="100"
VerticalAlignment="Top"
RelativePanel.AlignLeftWith="dataVerified"
SelectionMode="None"
ItemsSource="{Binding Path=ProductFields, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
IsItemClickEnabled="True">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductField.Field_Name}"
Width="150"
Style="{StaticResource TextBlockTitleProductsListPage}"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ItemClick">
<core:InvokeCommandAction Command="{Binding Path=test}">
</core:InvokeCommandAction>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</ListView>
</Grid>
</GridView.Header>
<GridView.ItemTemplate>
<DataTemplate ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<CheckBox HorizontalAlignment="Right"
VerticalAlignment="Center"
IsChecked="{Binding test1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<ListView Grid.Column="1"
VerticalAlignment="Top"
ItemsSource="{Binding ProductFieldValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Width="{Binding Width,ElementName=NewItemView}"
SelectionMode="None"
Style="{StaticResource ProductListTable}"
Name="ProductFieldValuesList">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Button Command="{Binding Path=DataContext.OpenProductInfo, ElementName=NewItemView}"
CommandParameter="{Binding DataContext.ProductId, ElementName=ProductFieldValuesList}"
Style="{StaticResource ProductListPageTextBlockButton}">
<TextBlock Text="{Binding}" TextWrapping="Wrap"/>
</Button>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</ScrollViewer>
我在坠机后得到了这样的信息:
谢谢你,XAML:
- 您的GridView不会从虚拟化中受益,因为您的GridView位于scrollviewer中,可以垂直增长以显示/加载所有项目。如果视口中的项目太多,GridView将自动显示滚动条
- 在GridView标题中,有一个listview正在尝试使用
设置其位置,但它看起来不正确,因为其中没有相对面板RelativePanel.AlignLeftWith=“dataVerified”
- 最后一件事是检查哪个线程正在初始化和设置ObservableCollection。如果它发生在不同的线程上,那么应用程序将崩溃,因为您无法从非UI线程设置UI属性。由于您是从某个源加载产品,因此很可能是在异步void/任务中进行的,因此请确保将该调用(初始化集合并设置属性)编组回UI线程。我不确定这是否会导致Win32异常,但值得检查
- 此外,这与问题无关,但在绑定中不需要
UpdateSourceTrigger=PropertyChanged
- 您的GridView不会从虚拟化中受益,因为您的GridView位于scrollviewer中,可以垂直增长以显示/加载所有项目。如果视口中的项目太多,GridView将自动显示滚动条
- 在GridView标题中,有一个listview正在尝试使用
设置其位置,但它看起来不正确,因为其中没有相对面板RelativePanel.AlignLeftWith=“dataVerified”
- 最后一件事是检查哪个线程正在初始化和设置ObservableCollection。如果它发生在不同的线程上,那么应用程序将崩溃,因为您无法从非UI线程设置UI属性。由于您是从某个源加载产品,因此很可能是在异步void/任务中进行的,因此请确保将该调用(初始化集合并设置属性)编组回UI线程。我不确定这是否会导致Win32异常,但值得检查
- 此外,这与问题无关,但在绑定中不需要
UpdateSourceTrigger=PropertyChanged
- 来自您的XAML: