ScrollTo无法使用Xamarin.Forms中的分组ListView

Nes*_*tor 3 c# xaml xamarin.forms

我有一个TabbedPage,其中包含一些ContentPage由组成,其中ContentView一些具有ListView

ListView包含一个被分组 ItemsSource为代表的自定义模型类:

public class DataGroup: List<DataGroupItem>
{   
    public string HeaderText { get; set; }

    public string ShortName { get; set; } 

    public string SubTitle { get; set; }

    public DataGroup(string headerText, string shortName)
    {
        HeaderText= headerText;
        ShortName= shortName;
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML代码(它也具有ItemTemplate):

<ListView x:Name="listView"
              Grid.Row="0"
              GroupDisplayBinding="{Binding HeaderText}"
              GroupShortNameBinding="{Binding ShortName}"
              HasUnevenRows="True"
              IsGroupingEnabled="True"
              ItemsSource="{Binding DataGroups}"
              SeparatorColor="Black"
              SeparatorVisibility="Default">
    ...
</ListView>
Run Code Online (Sandbox Code Playgroud)

更改实际选项卡时,需要ListView将滚动到某个组。

我使用以下代码:

ObservableCollection<DataGroup> dataGroups
    = this.listView.ItemsSource as ObservableCollection<DataGroup>;
if (scrolling)
{        
    var res = dataGroups.Where(dg=>dg.ItemCount > 3).LastOrDefault();
    if (res != null)
        //Device.StartTimer(TimeSpan.FromMilliseconds(150), () =>
        //{
            this.listView.ScrollTo(res, ScrollToPosition.Center, false);
            //return false;
        //});
}
Run Code Online (Sandbox Code Playgroud)

我尝试了中的所有变体ScrollToPosition,很遗憾,没有任何反应。

我还应该尝试什么?

Nes*_*tor 5

好吧,这真是一次冒险。

首先,我认为我应该将子项设置为该ScrollTo方法的目标,但它并没有改变。

作为一个模糊的想法,我将SelectedItem汤加入了汤中,它起作用了,所以最终得到了这个结果:

ObservableCollection<DataGroup> dataGroups= this.listView.ItemsSource as ObservableCollection<DataGroup>;
if (scrolling)
{        
  var res = dataGroups.Where(dg=>dg.ItemCount > 3).LastOrDefault();
  if (res != null && res.Count > 0)
  {
    this.listView.SelectedItem = res[0];
    this.listView.ScrollTo(this.listView.SelectedItem, ScrollToPosition.MakeVisible, false);
  }
}
Run Code Online (Sandbox Code Playgroud)