0

クエリを実行するには、DataContextから型指定されていないQueryableCollectionを取得する必要があります。私は次のコードを持っています:

printAbleListView = (ListView) printObject.FindName("printAbleListView");
// Here I like to have something like ObservableCollection<Object>
ObservableCollection<Journal> allItems = (ObservableCollection<Journal>) printAbleListView.DataContext;

// Add the page to the page preview collection
for (int i = 0; i <= (allItems.Count()/30); i++)
{
  printAbleListView.DataContext = null;
  printAbleListView.DataContext = allItems.Skip(30 * i).Take(30);
  document.SetPreviewPage((i + 1), printObject);
}

目標は、Metro-StyleWindows8アプリでListViewを印刷することです。現在、JournalDataTypeに型指定されていますが、型指定を解除して、関数をListViewだけでなく、すべてのListViewで再利用できるようにしたいと思いますJournal。これをアーカイブできますか?

4

1 に答える 1

3

例:

void GeneratePreview<T>(int itemsPerPage)
{
    var printAbleListView = (ListView)printObject.FindName("printAbleListView");
    var allItems = (ObservableCollection<T>)printAbleListView.DataContext;

    // Add the page to the page preview collection
    for (int i = 0; i <= (allItems.Count()/itemsPerPage); i++)
    {
      printAbleListView.DataContext =
              allItems.Skip(itemsPerPage * i).Take(itemsPerPage);
      document.SetPreviewPage((i + 1), printObject);
    }
}

ObservableCollection<T>型指定されていないアクセスの場合、非ジェネリックをサポートするファクトを実際に使用できますICollection

void GeneratePreview(int itemsPerPage)
{
    var printAbleListView = (ListView)printObject.FindName("printAbleListView");
    var allItems = (ICollection)printAbleListView.DataContext;

    var slice = new List<object>(itemsPerPage); // cannot use ArrayList for Win8 apps
    var pageNo = 1;
    foreach (var item in allItems)
    {            
        slice.Add(item);
        if (slice.Count % itemsPerPage == 0)
        {
            // flush
            printAbleListView.DataContext = slice;
            document.SetPreviewPage(pageNo, printObject);
            // and restart
            pageNo++;
            slice.Clear();
        }
    }
    if (slice.Count != 0) // flush the rest
    {
        printAbleListView.DataContext = slice;
        document.SetPreviewPage(pageNo, printObject);
    }
    // clean up
    printAbleListView.DataContext = null;
}
于 2013-03-03T14:05:03.427 に答える