Udostępnij przez


Składnia ścieżki właściwości

Możesz skorzystać z klasy PropertyPath oraz składni ciągu znaków, aby utworzyć wartość PropertyPath zarówno w XAML, jak i w kodzie. Wartości PropertyPath są wykorzystywane przez proces powiązania danych. Podobna składnia jest używana do celowania w animacje z użyciem scenorysów. W obu scenariuszach ścieżka właściwości opisuje przechodzenie jednej lub większej liczby relacji obiekt-właściwość, które ostatecznie prowadzą do jednej właściwości.

Ciąg ścieżki właściwości można ustawić bezpośrednio na atrybut w języku XAML. Możesz użyć tej samej składni ciągu, aby utworzyć właściwość PropertyPath , która ustawia powiązanie w kodzie lub ustawić obiekt docelowy animacji w kodzie przy użyciu właściwości SetTargetProperty. W środowisku uruchomieniowym systemu Windows istnieją dwa odrębne obszary funkcji, które używają ścieżki właściwości: wiązanie danych i określanie wartości docelowej animacji. Określanie wartości docelowej animacji nie tworzy podstawowych wartości składni ścieżki właściwości w implementacji środowiska uruchomieniowego systemu Windows. Informacje są przechowywane jako ciąg, a koncepcje przechodzenia po właściwościach obiektów są bardzo podobne. Powiązanie danych i animacja przeznaczone dla każdej z nich oceniają ścieżkę właściwości nieco inaczej, dlatego opisujemy składnię ścieżki właściwości oddzielnie dla każdej z nich.

Ścieżka właściwości dla obiektów w powiązaniu danych

W środowisku uruchomieniowym systemu Windows można powiązać wartość docelową dowolnej właściwości zależności. Wartość właściwości źródłowej powiązania danych nie musi być właściwością zależności; może to być właściwość obiektu biznesowego (na przykład klasa napisana w języku Microsoft .NET lub C++). Lub obiekt źródłowy dla wartości powiązania może być istniejącym obiektem zależności zdefiniowanym już przez aplikację. Do źródła można odwoływać się za pomocą prostej nazwy właściwości lub poprzez przemierzanie relacji między właściwościami w grafie obiektów biznesowych.

Można powiązać z pojedynczą wartością właściwości lub powiązać z właściwością docelową zawierającą listy lub kolekcje. Jeśli źródło jest kolekcją lub jeśli ścieżka określa właściwość kolekcji, silnik wiązania danych dopasowuje elementy kolekcji źródła do celu wiązania, w rezultacie pozwala to na takie działania jak wypełnianie ListBox listą elementów z kolekcji źródła danych, bez konieczności przewidywania określonych elementów w tej kolekcji.

Przechodzenie grafu obiektów

Element składni, który określa przechodzenie relacji obiektu-właściwości w grafie obiektu, jest znakiem kropki (.). Każda kropka w ciągu ścieżki właściwości wskazuje podział między obiektem (lewą stroną kropki) i właściwością tego obiektu (po prawej stronie kropki). Ciąg jest oceniany od lewej do prawej, co umożliwia przechodzenie przez wiele relacji właściwości-obiektów. Przyjrzyjmy się przykładowi:

"{Binding Path=Customer.Address.StreetAddress1}"

Poniżej przedstawiono sposób oceniania tej ścieżki:

  1. Obiekt kontekstu danych (lub źródło określone przez to samo powiązanie) jest wyszukiwany dla właściwości o nazwie "Klient".
  2. Obiekt, który jest wartością właściwości "Klient", jest przeszukiwany pod kątem właściwości o nazwie "Adres".
  3. Obiekt, który jest wartością właściwości "Address", jest wyszukiwany dla właściwości o nazwie "StreetAddress1".

W każdym z tych kroków wartość jest traktowana jako obiekt. Typ wyniku jest sprawdzany tylko wtedy, gdy powiązanie jest stosowane do określonej właściwości. Ten przykład zakończy się niepowodzeniem, jeśli wartość "Address" była tylko wartością ciągu, która nie ujawniła, jaka część ciągu była adresem ulicy. Zazwyczaj powiązanie odnosi się do konkretnych, zagnieżdżonych wartości właściwości obiektu biznesowego, który ma znaną i celową strukturę danych.

Reguły właściwości w ścieżce powiązania danych

  • Wszystkie właściwości, do których odwołuje się ścieżka właściwości, muszą być publiczne w źródłowym obiekcie biznesowym.
  • Właściwość end (właściwość, która jest ostatnią nazwaną właściwością w ścieżce) musi być publiczna i musi być modyfikowalna — nie można wiązać z wartościami statycznymi.
  • Właściwość końcowa musi być odczytywana/zapisywana, jeśli ta ścieżka jest używana jako informacje o ścieżce dla powiązania dwukierunkowego.

Indeksatorzy

Ścieżka właściwości powiązania danych może zawierać odwołania do właściwości indeksowanych. Umożliwia to powiązanie uporządkowanych list/wektorów lub słowników/map. Użyj nawiasów kwadratowych "[]", aby wskazać właściwość indeksowaną. Zawartość tych nawiasów może być liczbą całkowitą (dla listy uporządkowanej) lub ciągiem bez cudzysłów (dla słowników). Można również powiązać ze słownikiem, w którym klucz jest liczbą całkowitą. Możesz użyć różnych właściwości indeksowanych w tej samej ścieżce, przy czym kropka oddziela właściwość obiektu.

Rozważmy na przykład obiekt biznesowy, w którym znajduje się lista "Zespoły" (lista uporządkowana), z których każdy zawiera słownik "Gracze", gdzie każdy gracz jest identyfikowany przez nazwisko. Przykładowa ścieżka właściwości do określonego gracza w drugim zespole to: "Teams[1].Players[Smith]". (Użyj wartości 1, aby wskazuje drugi element w aplikacji "Teams", ponieważ lista jest indeksowana od zera).

Uwaga / Notatka

Obsługa indeksowania dla źródeł danych C++ jest ograniczona; zobacz Szczegółowe powiązanie danych.

Dołączone właściwości

Ścieżki właściwości mogą zawierać odwołania do dołączonych właściwości. Ponieważ nazwa identyfikująca dołączonej właściwości zawiera już kropkę, należy ująć dowolną dołączoną nazwę właściwości w nawiasach, aby kropka nie była traktowana jako krok właściwości obiektu. Na przykład ciąg określający, że chcesz użyć parametru Canvas.ZIndex jako ścieżki powiązania to "(Canvas.ZIndex)". Aby uzyskać więcej informacji na temat dołączonych właściwości, zobacz Omówienie dołączonych właściwości.

Łączenie składni ścieżek właściwości

Można połączyć różne elementy składni ścieżki właściwości w jednym ciągu. Można na przykład zdefiniować ścieżkę właściwości, która odwołuje się do indeksowanej dołączonej właściwości, jeśli źródło danych ma taką właściwość.

Debugowanie ścieżki właściwości powiązania

Ponieważ ścieżka właściwości jest interpretowana przez mechanizm wiązania i opiera się na informacjach, które mogą być dostępne tylko w czasie wykonywania, należy często debugować ścieżkę właściwości używaną do wiązania bez możliwości polegania na konwencjonalnym wsparciu czasu projektowania lub czasu kompilacji w narzędziach deweloperskich. W wielu przypadkach wynik w czasie wykonywania, gdy nie można rozpoznać ścieżki właściwości, jest pustą wartością bez błędu, ponieważ jest to zaprojektowane działanie rozwiązywania powiązania. Na szczęście Microsoft Visual Studio udostępnia tryb wyjścia debugowania, który może wyizolować, która część ścieżki właściwości wskazująca źródło powiązania nie udało się ustalić. Aby uzyskać więcej informacji na temat korzystania z tej funkcji narzędzia programistycznego, zobacz sekcję "Debugowanie" powiązania danych w głębi systemu.

Ścieżka właściwości do określania wartości docelowej animacji

Animacje polegają na określaniu wartości zależności, w której wartości scenorysu są stosowane podczas uruchamiania animacji. Aby zidentyfikować obiekt, w którym właściwość ma być animowana, animacja jest ukierunkowana na element według jego nazwy (atrybut x:Name). Często należy zdefiniować ścieżkę właściwości rozpoczynającą się od obiektu zidentyfikowanego jako Storyboard.TargetName i kończącego się konkretną wartością właściwości zależności, w której ma być stosowana animacja. Ta ścieżka właściwości jest używana jako wartość storyboard.TargetProperty.

Aby uzyskać więcej informacji na temat sposobu definiowania animacji w języku XAML, zobacz Animacje scenorysowe.

Proste kierowanie

Jeśli animujesz właściwość, która istnieje na samym obiekcie docelowym, a typ tej właściwości może mieć animację zastosowaną bezpośrednio do niej (zamiast do właściwości podrzędnej wartości właściwości), możesz po prostu nazwać właściwość animowaną bez dalszej kwalifikacji. Jeśli na przykład celujesz w podklasę Shape, na przykład Prostokąt, i stosujesz animowany kolor do właściwości Fill, ścieżka właściwości może być "Fill".

Określanie wartości docelowej właściwości pośredniej

Można animować właściwość, która jest podwłaszą właściwością obiektu docelowego. Innymi słowy, jeśli istnieje właściwość obiektu docelowego, która jest samym obiektem, a ten obiekt ma właściwości, należy zdefiniować ścieżkę właściwości, która wyjaśnia, jak przechodzić przez relację właściwości obiektu. Za każdym razem, gdy określasz obiekt, na którym chcesz animować podwłaściwość, ujmij nazwę właściwości w nawiasy i określ właściwość w formacie typname.propertyname. Aby na przykład określić, że chcesz uzyskać wartość właściwości RenderTransform obiektu docelowego, jako pierwszy krok w ścieżce właściwości określ "(UIElement.RenderTransform)". Nie jest to jeszcze kompletna ścieżka, ponieważ nie ma animacji, które można zastosować bezpośrednio do wartości Przekształć . W tym przykładzie teraz ukończysz ścieżkę właściwości, aby końcowa właściwość była właściwością podklasy Transform, która może być animowana przez wartość Double: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

Określanie określonego elementu podrzędnego w kolekcji

Aby określić element podrzędny we właściwości kolekcji, można użyć indeksatora liczbowego. Użyj nawiasów kwadratowych "[]" wokół wartości indeksu całkowitego. Można odwoływać się tylko do uporządkowanych list, a nie słowników. Ponieważ kolekcja nie jest wartością, która może być animowana, użycie indeksatora nigdy nie może być właściwością końcową w ścieżce właściwości.

Aby na przykład określić, że chcesz animować pierwszy stopień koloru w elemencie LinearGradientBrush zastosowanym do właściwości Background kontrolki, jest to ścieżka właściwości: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Zwróć uwagę, że indeksator nie jest ostatnim krokiem w ścieżce i że ostatni krok szczególnie musi odwoływać się do właściwości GradientStop.Color elementu 0 w kolekcji, aby zastosować do niej animowaną wartość Color .

Animowanie właściwości przyłączonej

Nie jest to typowy scenariusz, ale istnieje możliwość animowania dołączonej właściwości, o ile dołączona właściwość ma wartość właściwości zgodną z typem animacji. Ponieważ nazwa identyfikująca dołączonej właściwości zawiera już kropkę, należy ująć dowolną dołączoną nazwę właściwości w nawiasach, aby kropka nie była traktowana jako krok właściwości obiektu. Na przykład ciąg określający, że chcesz animować właściwość dołączoną Grid.Row do obiektu, użyj ścieżki właściwości "(Grid.Row)".

Uwaga / Notatka

W tym przykładzie wartość Grid.Row jest typem właściwości Int32 . więc nie można go animować za pomocą animacji Double. Zamiast tego należy zdefiniować ObjectAnimationUsingKeyFrames, który ma składniki DiscreteObjectKeyFrame, gdzie wartość ObjectKeyFrame.Value jest ustawiona na liczbę całkowitą, taką jak "0" lub "1".

Reguły właściwości w ścieżce właściwości docelowej animacji

  • Zakładany punkt początkowy ścieżki właściwości jest obiektem zidentyfikowanym przez storyboard.TargetName.
  • Wszystkie obiekty i właściwości, do których odwołuje się ścieżka właściwości, muszą być publiczne.
  • Właściwość końcowa (właściwość, która jest ostatnią nazwaną właściwością w ścieżce) musi być publiczna, posiadać możliwość odczytu i zapisu oraz być właściwością zależności.
  • Właściwość końcowa musi mieć typ właściwości, który może być animowany przez jedną z szerokich klas typów animacji (animacje kolorów , animacje podwójne , animacje punktów , ObjectAnimationUsingKeyFrames).

Klasa PropertyPath

Klasa PropertyPath jest podstawowym typem właściwości Binding.Path dla scenariusza powiązania.

W większości przypadków można zastosować właściwość PropertyPath w języku XAML bez użycia żadnego kodu. Jednak w niektórych przypadkach można zdefiniować obiekt PropertyPath przy użyciu kodu i przypisać go do właściwości w czasie wykonywania.

PropertyPath ma konstruktor PropertyPath(String) i nie ma konstruktora domyślnego. Ciąg przekazywany do tego konstruktora jest ciągiem zdefiniowanym przy użyciu składni ścieżki właściwości, jak wyjaśniono wcześniej. Jest to również ten sam ciąg, którego należy użyć do przypisania ścieżki jako atrybutu XAML. Jedynym innym interfejsem API klasy PropertyPath jest właściwość Path , która jest tylko do odczytu. Można użyć tej właściwości jako ciągu konstrukcyjnego dla innego wystąpienia PropertyPath .