{"record":{"id":"70e228060d16ba00","repo":"dotnet/maui","slug":"can-t-set-carouselview-to-position-carouselpositi-70e228","errorCode":null,"errorMessage":"Can't set CarouselView to position {carouselPosition}. ItemsSource has {ItemCount} items.","messagePattern":"Can't set CarouselView to position (.+?)\\. ItemsSource has (.+?) items\\.","errorType":"exception","errorClass":"IndexOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/Compatibility/Core/src/Windows/CollectionView/CarouselViewRenderer.cs","lineNumber":383,"sourceCode":"\t\t}\n\n\t\t[PortHandler]\n\t\tvoid UpdateFromCurrentItem()\n\t\t{\n\t\t\tvar currentItemPosition = GetItemPositionInCarousel(CarouselView.CurrentItem);\n\t\t\tCarouselView.ScrollTo(currentItemPosition, position: ScrollToPosition.Center, animate: CarouselView.AnimateCurrentItemChanges);\n\t\t}\n\n\t\t[PortHandler]\n\t\tvoid UpdateFromPosition()\n\t\t{\n\t\t\tif (CollectionViewSource == null)\n\t\t\t\treturn;\n\n\t\t\tvar carouselPosition = CarouselView.Position;\n\n\t\t\tif (carouselPosition >= ItemCount || carouselPosition < 0)\n\t\t\t\tthrow new IndexOutOfRangeException($\"Can't set CarouselView to position {carouselPosition}. ItemsSource has {ItemCount} items.\");\n\n\t\t\tSetCarouselViewCurrentItem(carouselPosition);\n\t\t}\n\n\t\t[PortHandler]\n\t\tvoid SetCarouselViewPosition(int position)\n\t\t{\n\t\t\tif (ItemCount == 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!IsValidPosition(position))\n\t\t\t\treturn;\n\n\t\t\tvar currentPosition = CarouselView.Position;\n\n\t\t\tif (currentPosition != position)","sourceCodeStart":365,"sourceCodeEnd":401,"githubUrl":"https://github.com/dotnet/maui/blob/f377ff1c5ee04d334d8a925f50c83a6b7afddf03/src/Compatibility/Core/src/Windows/CollectionView/CarouselViewRenderer.cs#L365-L401","documentation":"Thrown as IndexOutOfRangeException by CarouselViewRenderer.UpdateFromPosition when CarouselView.Position is set to a value outside [0, ItemCount). The renderer enforces that the position must map to a real item in the bound ItemsSource collection before it attempts to display it.","triggerScenarios":"Setting CarouselView.Position to an index >= ItemCount or < 0. Common when ItemsSource is replaced with a smaller collection while Position retains its old value, or when Position is data-bound to a model property that hasn't been clamped.","commonSituations":"Replacing the ItemsSource with a shorter list without resetting Position; data-binding Position to a 1-based or off-by-one index; clearing ItemsSource while Position was non-zero.","solutions":["Clamp Position to [0, ItemsSource.Count - 1] before or immediately after updating ItemsSource.","Reset Position to 0 when replacing ItemsSource with a new collection.","Ensure any data-bound Position property is revalidated when the item count changes."],"exampleFix":"// before\ncarouselView.ItemsSource = newList; // Position may still be 5\n\n// after\ncarouselView.Position = 0;\ncarouselView.ItemsSource = newList;\n// or clamp: carouselView.Position = Math.Min(carouselView.Position, newList.Count - 1);","handlingStrategy":"validation","validationCode":"if (carouselView.Position < 0 || carouselView.Position >= items.Count)\n    carouselView.Position = 0;","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Reset or clamp CarouselView.Position whenever ItemsSource is replaced.","Ensure data-bound Position properties are revalidated on collection changes."],"tags":["wpf","maui-compatibility","carouselview","collectionview","index-validation"],"backgroundTag":null,"analyzedSha":"f377ff1c5ee04d334d8a925f50c83a6b7afddf03","analyzedAt":"2026-08-13T14:26:18.069Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}