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,很遗憾,没有任何反应。
我还应该尝试什么?
好吧,这真是一次冒险。
首先,我认为我应该将子项设置为该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)