代码之家  ›  专栏  ›  技术社区  ›  David Thielen

MudCaroousel-滑动到下一个/上一个,然后无声地替换列表

  •  0
  • David Thielen  · 技术社区  · 2 年前

    我正在尝试使用 <MudCarousel> 以提供类似火绒的体验。为了做到这一点,我用板条箱 MudCarousel.ItemsSource 那是一个 List<MyItems> 其中列表内容最初为:[Item1,Item0,Item1],并设置“SelectedIndex=1”。

    然后,当他们向任意一个方向滑动时,他们会从项目0转到项目1。然后,我使用[Item2,Item1,Item2]重建列表,并调用 MudCarousel.MoveTo(1);

    这一切都很好。但从视觉上看,我无法正确地将其滑动到新项目。有时它会跳,有时它只是跳。然后,当我更新ItemsSource时,有时内容会重新呈现。

    所以我的问题是,在 MudCarousel.SelectedIndexChanged 方法,如何处理此问题:

    1. 在向左/向右滑动/单击时,上一个/下一个项目是否会滑入页面?
    2. 当我更新ItemsSource内容并调用MoveTo(1)时,它意识到这就是显示的内容,因此不进行额外的渲染?
    0 回复  |  直到 2 年前
        1
  •  0
  •   RBee    2 年前

    我想你可能不得不拖延时间。

    您至少需要1毫秒 await Task.Delay(1) 在selectedIndex被更改后,然而对于carousel UX,我发现100-200效果最好。

    <MudCarousel SelectedIndex="selectedIndex" SelectedIndexChanged="HandleIndexChanged">
        <ItemTemplate>
        <!--  -->
        </ItemTemplate>
    </MudCarousel>
    
    async Task HandleIndexChanged(int newIndex)
    {
        selectedIndex = newIndex;
        await Task.Delay(200);
        if (newIndex != 1)
        {
            await ReBuildItems();
        }
        _carousel.MoveTo(1);
    }
    

    MudBlazor snippet