Wzorzec kontrolki ItemContainer
Opisuje wytyczne i konwencje implementowania IItemContainerProvider, w tym informacje o metodach. Wzorzec sterowania ItemContainer służy do obsługi wirtualizacji elementów.
Kontrolki zawierające dużą liczbę elementów podrzędnych mogą używać wirtualizacji do wydajnego zarządzania elementami. Dzięki wirtualizacji kontrolka przechowuje pełne informacje w pamięci tylko dla podzestawu elementów w danym momencie. Zazwyczaj podzbiór zawiera tylko te elementy, które są obecnie widoczne dla użytkownika. Pełne informacje o pozostałych elementach zwirtualizowanych są przechowywane w magazynie i są ładowane do pamięci lub realizowane, ponieważ kontrolka wymaga jej, na przykład, ponieważ nowe elementy stają się widoczne dla użytkownika.
Na przykład na poniższym diagramie przedstawiono pole listy zawierające tysiące zwirtualizowanych elementów. Ponieważ kontrolka przechowuje pełne informacje tylko dla elementów podrzędnych, które są obecnie widoczne, dostawca może uwidocznić elementy automatyzacji interfejsu użytkownika firmy Microsoft tylko dla elementów 100 —127.
diagram
Kontrolki korzystające z wirtualizacji stanowią wyzwanie, ponieważ tylko elementy niezwirtualizowane są w pełni dostępne jako elementy automatyzacji interfejsu użytkownika w drzewie automatyzacji interfejsu użytkownika. Elementy zwirtualizowane nie istnieją w drzewie, więc informacje o nich nie są dostępne.
Aby udostępnić informacje o elementach zwirtualizowanych, dostawcy implementują wzorzec kontrolki ItemContainer, który uwidacznia interfejs IItemContainerProvider. Metoda FindItemByProperty znajduje elementy podrzędne na podstawie wartości określonej właściwości, takiej jak Name, AutomationIdlub IsSelected. Jeśli element jest zwirtualizowany, FindItemByProperty pobiera element zastępczy automatyzacji interfejsu użytkownika dla elementu. Element zastępczy to implementacja interfejsu IRawElementProviderSimple, który obsługuje tylko wzorzec kontrolki VirtualizedItem.
Metoda IVirtualizedItemProvider::Realize umożliwia klientowi zażądanie, aby element zwirtualizowany został zrealizowany, w ten sposób uwidaczniając pełny element automatyzacji interfejsu użytkownika dla elementu, tak aby wszystkie wymagane właściwości i wzorce były dostępne.
Mimo że głównym celem wzorca sterowania ItemContainer jest obsługa scenariuszy kontenerów zwirtualizowanych, można go zaimplementować za pomocą dowolnego kontenera, który pobiera elementy podrzędne według nazwy, niezależnie od tego, czy kontener korzysta z wirtualizacji.
Ten temat zawiera następujące sekcje.
- wytyczne i konwencje implementacji
- wymaganych elementów członkowskich dla obiektu IItemContainerProvider
- Tematy pokrewne
Wytyczne i konwencje implementacji
Podczas implementowania wzorca kontrolki ItemContainer należy pamiętać o następujących wytycznych i konwencjach:
- Każda kontrolka, która może zawierać elementy zwirtualizowane, musi obsługiwać wzorzec kontrolki ItemContainer. Każdy kontener obsługujący pobieranie elementów na podstawie wartości właściwości może obsługiwać ten wzorzec, niezależnie od tego, czy kontener korzysta z wirtualizacji.
- W przypadku wirtualizacji kontenera mogą mieć wpływ inne wzorce kontrolek, takie jak Selection, Tablei Grid. Na przykład metoda ISelectionProvider::GetSelection może obsługiwać tylko elementy, które znajdują się w widoku, lub tylko wybrane elementy, które nie są obecnie zwirtualizowane.
- Na wzorzec sterowania przewijania nie powinien mieć wpływu wirtualizacja.
- Liczba elementów ani informacje o indeksie nie są dostępne dla elementów zwirtualizowanych. Zwirtualizowana kontrolka może używać właściwości DescribedBy lub ItemStatus, aby w razie potrzeby podać te informacje.
- Deweloperzy kontroli powinni dokumentować i publikować szczegóły wszystkich właściwości automatyzacji interfejsu użytkownika i wzorców kontroli, których dotyczy użycie wirtualizacji. Mimo że wzorce kontrolek ItemContainer i VirtualizedItem oferują podstawową obsługę, mogą nie obsługiwać niektórych zachowań wirtualizacji.
Poniższe wytyczne i wymagania dotyczą metodyIItemContainerProvider::FindItemByProperty.
- Chociaż nie jest to wymagane, firma Microsoft zdecydowanie zaleca, aby FindItemByProperty obsługiwać właściwości name, AutomationIdi IsSelected.
- FindItemByProperty może być powolny, jeśli konieczne jest przejście przez wiele obiektów w celu znalezienia pasującego obiektu.
- FindItemByProperty można wywołać wielokrotnie, aby znaleźć elementy w sekwencji. Elementy mogą być w dowolnej kolejności, o ile każdy element jest zwracany tylko raz.
- findItemByProperty można zaimplementować, aby znaleźć tylko te elementy, które są wyświetlane w widoku kontrolki lub zawartości drzewa automatyzacji interfejsu użytkownika. Elementy, które są wyświetlane tylko w widoku nieprzetworzonym, można pominąć, aby uniknąć pobierania wielu elementów reprezentujących tylko część "elementu" dla użytkownika.
- Gdy kryteria wyszukiwania są zgodne z elementem zwirtualizowanym, dostawca może zwrócić element zastępczy obsługujący wzorzec kontrolki VirtualizedItem. Następujące wytyczne dotyczą elementów zastępczych:
- Pobieranie elementu zastępczego elementu zwirtualizowanego nie może spowodować zmian interfejsu użytkownika.
- Element zastępczy musi być elementem równorzędnym innych elementów podrzędnych (wymagane jest zdarzenie zmiany struktury).
- Jeśli to możliwe, dostawca może utworzyć pełny element automatyzacji zamiast symbolu zastępczego.
- Gdy kryteria wyszukiwania są zgodne z elementem niezwirtualizowanym, dostawca musi zwrócić rzeczywisty element, a nie symbol zastępczy.
- Jeśli nie znaleziono elementu, IItemContainerProvider::FindItemByProperty powinien ustawić parametr NULL i zwrócić S_OK.
- Gdy parametr propertyId wynosi 0, dostawca powinien zwrócić następny element po pStartAfter.
- Jeśli parametr pStartAfter ma wartość null, a propertyId wynosi 0, dostawca powinien zwrócić pierwszy element w kontenerze.
- Gdy parametr propertyId wynosi 0, parametr wartości jest ignorowany.
Poniższe wytyczne i wymagania dotyczą elementów zastępczych elementów zwirtualizowanych w drzewie automatyzacji interfejsu użytkownika.
- Mimo że dostawcy są zachęcani do obsługi większej liczby właściwości i wzorców kontrolek dla elementu zastępczego, wymagany jest tylko wzorzec kontrolki VirtualizedItem.
- Dostawca może unieważnić poprzedni element zastępczy, gdy IItemContainerProvider::FindItemByProperty jest wywoływany ponownie. (Jeśli klient musi zrealizować element zastępczy, powinien to zrobić natychmiast; w przeciwnym razie element może zostać unieważniony, jeśli FindItemByProperty jest wywoływany ponownie lub jeśli okno widoku zmieni się z jakiegokolwiek powodu.
- Akcje interfejsu użytkownika, takie jak przewijanie lub zmiana rozmiaru, mogą spowodować zmianę widoku kontenera i wyświetlenie nowego zestawu elementów podrzędnych. W tym przypadku wcześniej pobrane elementy zastępcze mogą nie być dostępne w drzewie automatyzacji interfejsu użytkownika.
- Dostawca nie powinien wirtualizować elementów interfejsu użytkownika, które są dostępne na ekranie w widoku obiektu kontenera.
Wymagane elementy członkowskie dla dostawcy IItemContainerProvider
Poniższa metoda jest wymagana do zaimplementowania interfejsuIItemContainerProvider.
Wymagane elementy członkowskie | Typ elementu członkowskiego | Notatki |
---|---|---|
FindItemByProperty | Metoda | Żaden |
Wzorzec kontrolki ItemContainer nie ma skojarzonych właściwości ani zdarzeń.
Tematy pokrewne
-
Wzorce kontrolek automatyzacji interfejsu użytkownika — omówienie
-
wzorzec kontrolki VirtualizedItem