仮想化リスト用のWin8 Metro参照アプリケーションを作成しようとしています。いくつかの(非常にまばらな)読書をする際に、これをサポートするための推奨される方法はISupportIncrementalLoading
インターフェイスを使っていることがわかりました。ISupportIncrementalLoadingは一度だけ起動します
私のHasmoreItems
プロパティがTrueを返すようにコードされているにもかかわらず、LoadMoreItemsAsync
メソッドが一度呼び出されたが、再び呼び出されないリファレンスアプリケーションに問題があります。
以下のコードは40個のアイテムを読み込み、その後に一度に「x」番号をロードすることです。最初の40個のアイテムをロードした後、42個をロードするように促され、再度ロードすることは決してありません。
ここに私のコードの関連部分があります:
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とサポートクラス:それは感じているとき
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;
}
}
}
さて、シャック。それは動作します。彼らがRCでこれを解決するかどうかは不思議です... – Robaticus