我有一个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;
}
}
的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
所有变化,遗憾的是,没有任何反应。
还有什么我应该尝试一下呢?
嗯,这是一个相当冒险摸不着头脑。
首先,我想我应该设置一个子项作为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);
}
}
尝试使用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);
}
}
不要忘了还设置组。您需要设置如下两个组和项目,见例如:
listView.ScrollTo(item, group, ScrollToPosition.Start, true);