2016-09-03 5 views
3

Ich habe eine TabbedPage und es enthält ein paar ContentPage, die aus einer ContentView bestehen und einige von ihnen hat eine ListView.ScrollTo nicht mit gruppierten ListView in Xamarin.Forms

Die ListView enthält eine gruppiert Itemssource durch eine benutzerdefinierte Modell-Klasse dargestellt:

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; 
    } 
} 

Der XAML-Code (es hat eine ItemTemplate auch):

<ListView x:Name="listView" 
       Grid.Row="0" 
       GroupDisplayBinding="{Binding HeaderText}" 
       GroupShortNameBinding="{Binding ShortName}" 
       HasUnevenRows="True" 
       IsGroupingEnabled="True" 
       ItemsSource="{Binding DataGroups}" 
       SeparatorColor="Black" 
       SeparatorVisibility="Default"> 

Wenn ich die tatsächliche ändern Tab, Ich brauche die Listview zu einer bestimmten Gruppe gescrollt werden.

ich diesen Code verwenden:

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; 
     //}); 
    } 

ich in ScrollToPosition alle Varianten ausprobiert, leider passiert nichts.

Was sollte ich noch versuchen?

Antwort

3

Nun, es war ein ziemliches Abenteuer, dies herauszufinden.

Zuerst dachte ich, ich sollte ein Kind Artikel als Ziel der ScrollTo-Methode, aber es änderte nichts.

Als vage Idee, habe ich die SelectedItem in die Suppe, und es hat funktioniert, so habe ich dies als Endergebnis:

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); 
    } 
} 
Verwandte Themen