ScrollTo不与Xamarin.Forms分组的ListView工作

问题描述 投票:3回答:3

我有一个TabbedPage,它包含了由ContentPageContentView,其中一些有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;
    }
}

的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>

当我改变实际的标签,我需要的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;
        //});
}

我试着在ScrollToPosition所有变化,遗憾的是,没有任何反应。

还有什么我应该尝试一下呢?

c# xaml xamarin.forms
3个回答
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);
  }
}

0
投票

尝试使用RES [0],而不是资源,是这样的:

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.ScrollTo(res[0], ScrollToPosition.MakeVisible, false);
  }
}

0
投票

不要忘了还设置组。您需要设置如下两个组和项目,见例如:

listView.ScrollTo(item, group, ScrollToPosition.Start, true);
© www.soinside.com 2019 - 2024. All rights reserved.