Estoy intentando crear una aplicación de referencia Win8 Metro para listas virtualizadas. Al hacer algunas lecturas (muy dispersas), descubrí que la forma recomendada de hacerlo es a través de la interfaz ISupportIncrementalLoading
.ISupportIncrementalLoading solo se dispara una vez
Tengo un problema con mi aplicación de referencia, donde el método LoadMoreItemsAsync
se llama una vez, pero no se vuelve a llamar, aunque mi propiedad HasmoreItems
está codificada para devolver True.
Lo que el siguiente código debe hacer es cargar 40 elementos, luego cargar 'x' número a la vez. Lo que sucede es que carga los primeros 40 elementos, luego se le pide que cargue 42 más, y luego nunca se le pide que cargue nuevamente.
He aquí las partes pertinentes de mi código:
XAML
<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
<ListView ItemsSource="{Binding Items}" Width="800" HorizontalAlignment="Left" Margin="12">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" Foreground="White"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
ViewModel y clases de apoyo:
public class MainViewModel : ViewModelBase
{
public MyIncrementalCollection Items { get; set; }
public MainViewModel()
{
Items = new MyIncrementalCollection();
for (int i = 0; i < 40; i++)
{
Items.Add(new MyData {Title = string.Format("Item: {0}", i)});
}
}
}
public class MyData
{
public string Title { get; set; }
}
public class MyIncrementalCollection : ObservableCollection<MyData>, ISupportIncrementalLoading
{
public bool HasMoreItems
{
get
{
return true;
}
}
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
{
return
(IAsyncOperation<LoadMoreItemsResult>)
AsyncInfo.Run((System.Threading.CancellationToken ct) => LoadDataAsync(count));
}
private async Task<LoadMoreItemsResult> LoadDataAsync(uint count)
{
for (int i = 0; i < count; i++)
{
this.Add(new MyData { Title = string.Format("Item: {0}, {1}", i, System.DateTime.Now) });
}
var ret = new LoadMoreItemsResult {Count = count};
return ret;
}
}
}
Bueno, mierda. Eso funciona. Me pregunto si arreglarán esto en el RC ... – Robaticus