Frage

Mit dem Business Application Template aus den brandneuen RIA Service freigegeben, können Sie viele Beispiele mit Hilfe der Datenraster auf einen DomainDataSource in Kombination mit einem DataPager sehen. Die Eigenschaften Pagesize und Lastgrßen können verwendet werden, um die Datenmenge zu justieren auf einer Seite und die Daten angezeigt werden, die im Hintergrund vorab abgerufen wird.

Nun möchte Ich mag einen Datenraster mit einer Scrollbar haben und ohne Pager. Die zugrunde liegenden DomainDataSource sollten nur die Daten laden, die in dem Gitter diplayed wird. Es sollte eine weitere Belastung auslösen, wenn der Benutzer auf Elemente nach unten scrollt, die noch nicht im Datenkontext ist. Gibt es eine Beispielimplementierung, wie dies zu tun?

War es hilfreich?

Lösung

Ich habe gerade ein paar Blog-Posts ( Teil 1 , Teil 2 ), dass meine Lösung für dieses Problem geben. Ich habe auch geschrieben GitHub rel="nofollow"> dass Geräte meine eigene nehmen auf dem VirtualCollection Konzept (ich weiß nicht, wie dies mit Infragistics Kontrolle vergleicht, weil ich das nicht) verwendet haben.

Um zu zeigen, wie einfach es zu bedienen ist, sind hier ein paar Auszüge aus der Probe. Erstens ist hier, wie Sie verwenden VirtualCollection , die Klasse, Koordinaten, die die Daten-Abruf:

public class MainViewModel : ViewModel
{
    private NetflixTitlesSource _source;

    public VirtualCollection<Title> Items { get; private set; }

    public MainViewModel()
    {
        _source = new NetflixTitlesSource();
        Items = new VirtualCollection<Title>(_source, pageSize: 20, cachedPages: 5);
    }

    protected override void OnViewLoaded()
    {
        Items.Refresh();
    }
}

In XAML Sie einfach binden die Items Eigenschaft auf die ItemsSource Eigenschaft eines ListBox oder DataGrid

Für jede Datenquelle müssen Sie eine VirtualCollectionSource implementieren. Hier ist, was die beiden wichtigsten Methoden der NetflixTitlesSource wie folgt aussehen:

public class NetflixTitlesSource : VirtualCollectionSource<Title>
{
    protected override Task<int> GetCount()
    {
        return GetQueryResults(0, 1, null)
            .ContinueWith(t => (int)t.Result.TotalCount, TaskContinuationOptions.ExecuteSynchronously);
    }

    protected override Task<IList<Title>> GetPageAsyncOverride(int start, int pageSize, IList<SortDescription> sortDescriptions)
    {
        return GetQueryResults(start, pageSize, sortDescriptions)
            .ContinueWith(t => (IList<Title>)((IEnumerable<Title>)t.Result).ToList(), TaskContinuationOptions.ExecuteSynchronously);
    }

    private Task<QueryOperationResponse<Title>> GetQueryResults(int start, int pageSize, IList<SortDescription> sortDescriptions)
    {
        // code to query the Netflix OData API
    }
}

Andere Tipps

Überprüfen Sie die Arbeit heraus, dass Bea Stöllnitz auf ihrem Blog getan hat. Obwohl es nicht eine direkte Antwort auf Ihre Frage, hat sie ziemlich viel auf UI und Visualisierung von Daten geschrieben. Hier wird aus ihnen ein Link Blog, dass ich helfen können denken, um Ihnen den Einstieg:

Daten-Virtualisierung: http://bea.stollnitz.com/blog/?p= 344

HTH!
Chris

Es ist Stealth-Paging genannt. Komponente Man hat eine Probe ihres Datagrid, die Stealth-Paging verwendet. Sobald Sie nach unten scrollen, es wird die nächste Seite.

http://demo.componentone.com/Silverlight/ControlExplorer/ # Datagrid / Stealth% 20Paging

Zeigt die Demo, und Sie können die Probe herunterladen, die den Code zeigen.

Hope, das hilft,

Greg

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top