Tôi đang cố gắng tạo một ứng dụng tham chiếu Win8 Metro cho các danh sách được ảo hóa. Khi thực hiện một số đọc (rất thưa thớt), tôi đã nhận thấy rằng cách khuyến khích hỗ trợ này là thông qua giao diện ISupportIncrementalLoading
.ISupportIncrementalLoading only fire after once
Tôi gặp sự cố với ứng dụng tham chiếu, trong đó phương thức LoadMoreItemsAsync
được gọi một lần, nhưng không được gọi lại, mặc dù thuộc tính HasmoreItems
của chúng tôi được mã hóa cứng để trả về True.
Mã dưới đây nên làm là tải 40 mục, sau đó tải số 'x' vào một thời điểm sau đó. Điều gì xảy ra là nó tải 40 mục đầu tiên, sau đó được nhắc tải 42 hơn, sau đó không bao giờ được yêu cầu tải lại.
Đây là phần có liên quan của mã của tôi:
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 và Hỗ trợ Lớp học:
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;
}
}
}
Vâng, shucks. Điều đó hoạt động. Tôi tự hỏi nếu họ sẽ sửa lỗi này trong RC ... – Robaticus