我一直在爲這個異常(以及隨後的硬件崩潰)奮戰了大約一天。 Xamarin Forms中有一個ListView,它可以對頁眉進行分組。儘管我可以從Call Stack中收集,但由於分組而發生錯誤。我通過從ListView中移除分組來驗證這一點,並且應用程序顯示數據而不會崩潰。我甚至在幾周內將代碼區分開來,沒有什麼突出的。 這也只發生在新推出時,隨後的推出不會引發此異常或崩潰。Xamarin Forms - 有序列表和參數OutOfRange
如何進一步調試和解決此問題?
列表視圖XAML
<ListView x:Name="ListViewItems"
ItemsSource="{Binding ItemsGrouped}"
GroupDisplayBinding="{Binding Key.DisplayText}"
IsGroupingEnabled="true">
<ListView.GroupHeaderTemplate>
<DataTemplate>
<ViewCell>
<cells:MyGroupHeaderView/>
</ViewCell>
</DataTemplate>
</ListView.GroupHeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<cells:ItemCellView />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
MyGroupHeaderView XAML
<StackLayout VerticalOptions="Center">
<Label Text="{Binding Key.DisplayText}">
</Label>
</StackLayout>
分組C#代碼
var result = from s in myItems
orderby s.ItemDateTime
group s by s.GetSortGroupInfo()
into itemGroup
select new Grouping<GroupInfo, ItemViewModel>(itemGroup.Key, itemGroup);
的GroupInfo類(用於排序和顯示)
public class GroupInfo
{
public string DisplayText { get; set; }
public int SortValue { get; set; }
}
綁定屬性和Setter
public ObservableRangeCollection<Grouping<GroupInfo, ItemViewModel>> ItemsGrouped { get; }
= new ObservableRangeCollection<Grouping<GroupInfo, StopViewModel>>();
this.ItemsGrouped.ReplaceRange(
this.MyItems.GroupByDate()
.OrderBy(f => f.Key.SortValue)
.ToList());
我更換了ReplaceRange,取出了GroupDisplayBinding,並添加了CachingStrategy,但仍然崩潰。我可以調試並逐步通過我們所有的代碼,而不會造成問異常似乎在渲染上發生。 –
您可以發佈一個完整的最小獨立示例。我能夠重現您的錯誤,但無法重現緩存策略回收時,或不使用ReplaceRange時。 – Damian