我注意到我的 .Net MAUI 解决方案中的 CarouselView 不会对 Position 或 CurrentItem 更改做出反应。然后我采取了“毛伊岛样本”解决方案(https://github.com/dotnet/maui-samples)并在“Set CurrentItem/Position”示例页面上复制了相同的解决方案。这是示例解决方案代码,我没有更改一行代码,“按原样”运行
public MonkeysViewModel()
{
source = new List<Monkey>();
CreateMonkeyCollection();
CurrentItem = Monkeys.Skip(3).FirstOrDefault();
OnPropertyChanged("CurrentItem");
Position = 3;
OnPropertyChanged("Position");
}
它应该跳过前 3 个项目并显示第四只猴子,但它显示的是第一个,即狒狒:
我使用 Android Emulator API 32。知道可能出了什么问题吗?
这个问题还有一些相关的问题。
您可以在这里关注他们:
https://github.com/dotnet/maui/issues/7575
https://github.com/dotnet/maui/issues/9749
感谢您的支持和反馈。
致以诚挚的问候!
杰西
我通过为 CarouselView 创建自定义渲染器找到了 PositionChangedCommand 的解决方案,它对我有用,希望它也能帮助您!
public class CarouselViewRenderer : Microsoft.Maui.Controls.Compatibility.Platform.iOS.CarouselViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<CarouselView> e)
{
base.OnElementChanged(e);
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs changedProperty)
{
base.OnElementPropertyChanged(sender, changedProperty);
if (changedProperty.PropertyName == "Position")
{
if (Control != null)
{
var carouselView = Element as CarouselView;
if (carouselView != null)
{
carouselView.PositionChangedCommand?.Execute(null);
}
}
}
}
}
以及 MauiProgram.cs 页面上的 CreateMauiApp()
var builder = MauiApp.CreateBuilder();
_ = builder
.UseMauiApp<App>()
.ConfigureMauiHandlers(handlers =>
{
#如果是IOS
handlers.AddCompatibilityRenderer(typeof(CarouselView), typeof(Platforms.iOS.Renderers.CarouselViewRenderer));
#endif });