Omówienie powiązania danych WPF z LINQ to XML

W tym artykule przedstawiono funkcje dynamicznego System.Xml.Linq powiązania danych w przestrzeni nazw. Te funkcje mogą być używane jako źródło danych dla elementów interfejsu użytkownika (UI) w aplikacjach Windows Presentation Foundation (WPF). Ten scenariusz opiera się na specjalnych właściwościach dynamicznych i System.Xml.Linq.XAttributeSystem.Xml.Linq.XElement.

XAML i LINQ to XML

Extensible Application Markup Language (XAML) to dialekt XML utworzony przez firmę Microsoft do obsługi technologii .NET. Jest on używany w WPF do reprezentowania elementów interfejsu użytkownika i powiązanych funkcji, takich jak zdarzenia i powiązanie danych. W programie Windows Workflow Foundation język XAML jest używany do reprezentowania struktury programu, takiej jak kontrola programu (przepływy pracy). Język XAML umożliwia deklaratywne aspekty technologii oddzielone od powiązanego kodu proceduralnego, który definiuje bardziej zdywidualizowane zachowanie programu.

Istnieją dwa szerokie sposoby interakcji między językami XAML i LINQ to XML:

  • Ponieważ pliki XAML są poprawnie sformułowane XML, mogą być odpytywane i manipulowane za pomocą technologii XML, takich jak LINQ to XML.

  • Ponieważ zapytania LINQ to XML reprezentują źródło danych, te zapytania mogą służyć jako źródło danych do powiązania danych dla elementów interfejsu użytkownika WPF.

W tej dokumentacji opisano drugi scenariusz.

Powiązanie danych w programie Windows Presentation Foundation

Powiązanie danych WPF umożliwia elementowi interfejsu użytkownika skojarzenie jednej z jego właściwości ze źródłem danych. Prostym przykładem jest Label to, którego tekst przedstawia wartość właściwości publicznej w obiekcie zdefiniowanym przez użytkownika. Powiązanie danych WPF opiera się na następujących składnikach:

Składnik opis
Obiekt docelowy powiązania Element interfejsu użytkownika, który ma być skojarzony ze źródłem danych. Elementy wizualne w WPF pochodzą z UIElement klasy .
Właściwość docelowa Właściwość zależności docelowego powiązania, która odzwierciedla wartość źródła powiązania danych. Właściwości zależności są obsługiwane bezpośrednio przez klasę DependencyObject , z której UIElement pochodzą.
Obiekt źródłowy powiązania Obiekt źródłowy dla co najmniej jednej wartości dostarczonej do elementu interfejsu użytkownika na potrzeby prezentacji. Platforma WPF automatycznie obsługuje następujące typy jako źródła powiązań: obiekty CLR, ADO.NET obiekty danych, dane XML (z zapytań XPath lub LINQ do XML) lub inne DependencyObject.
Ścieżka źródłowa Właściwość źródła powiązania rozpoznawana jako wartość lub zestaw wartości, które mają być powiązane.

Właściwość zależności jest koncepcją specyficzną dla platformy WPF, która reprezentuje dynamicznie obliczoną właściwość elementu interfejsu użytkownika. Na przykład właściwości zależności często mają wartości domyślne lub wartości udostępniane przez element nadrzędny. Te właściwości specjalne są wspierane przez wystąpienia DependencyProperty klasy (a nie pola tak jak we właściwościach standardowych). Aby uzyskać więcej informacji, zobacz Właściwości zależności — omówienie.

Dynamiczne powiązanie danych w WPF

Domyślnie powiązanie danych odbywa się tylko wtedy, gdy docelowy element interfejsu użytkownika jest inicjowany. Jest to nazywane powiązaniem jednorazowym . W większości celów jest to niewystarczające; zazwyczaj rozwiązanie powiązania danych wymaga dynamicznego propagowania zmian w czasie wykonywania przy użyciu jednego z następujących elementów:

  • Powiązanie jednokierunkowe powoduje automatyczne propagowanie zmian po jednej stronie. Najczęściej zmiany w źródle są odzwierciedlane w obiekcie docelowym, ale odwrotnie może być czasami przydatne.

  • W dwukierunkowym powiązaniu zmiany w źródle są automatycznie propagowane do obiektu docelowego, a zmiany w obiekcie docelowym są automatycznie propagowane do źródła.

Aby można było utworzyć jednokierunkowe lub dwukierunkowe powiązanie, źródło musi zaimplementować mechanizm powiadamiania o zmianie, na przykład implementując INotifyPropertyChanged interfejs lub używając wzorca PropertyNameChanged dla każdej obsługiwanej właściwości.

Aby uzyskać więcej informacji na temat powiązania danych w WPF, zobacz Powiązanie danych (WPF) .

Właściwości dynamiczne w klasach LINQ to XML

Większość klas LINQ to XML nie kwalifikuje się jako odpowiednie dynamiczne źródła danych WPF. Niektóre z najbardziej przydatnych informacji są dostępne tylko za pośrednictwem metod, a nie właściwości i właściwości w tych klasach nie implementują powiadomień o zmianach. Aby obsługiwać powiązanie danych WPF, LINQ to XML uwidacznia zestaw właściwości dynamicznych.

Te właściwości dynamiczne są specjalnymi właściwościami czasu wykonywania, które duplikują funkcjonalność istniejących metod i właściwości w XAttribute klasach i XElement . Zostały one dodane do tych klas wyłącznie w celu umożliwienia im działania jako dynamiczne źródła danych dla WPF. Aby spełnić tę potrzebę, wszystkie te właściwości dynamiczne implementują powiadomienia o zmianach. Szczegółowe informacje o tych właściwościach dynamicznych podano w następnej sekcji LINQ to XML Dynamic Properties.

Uwaga

Wiele standardowych właściwości publicznych, które można znaleźć w różnych klasach w System.Xml.Linq przestrzeni nazw, może służyć do jednorazowego powiązania danych. Należy jednak pamiętać, że ani źródło, ani cel nie zostaną dynamicznie zaktualizowane w ramach tego schematu.

Uzyskiwanie dostępu do właściwości dynamicznych

Nie można uzyskać dostępu do właściwości dynamicznych XAttribute w klasach i XElement , takich jak właściwości standardowe. Na przykład w językach zgodnych ze specyfikacją CLR, takich jak C#, nie mogą być:

  • Dostęp bezpośrednio w czasie kompilacji. Właściwości dynamiczne są niewidoczne dla kompilatora i funkcji IntelliSense programu Visual Studio.

  • Odnaleziono lub uzyskujesz dostęp w czasie wykonywania przy użyciu odbicia platformy .NET. Nawet w czasie wykonywania, nie są właściwościami w podstawowym sensie CLR.

W języku C# dostęp do właściwości dynamicznych można uzyskiwać tylko w czasie wykonywania za pośrednictwem obiektów udostępnianych przez System.ComponentModel przestrzeń nazw.

Natomiast dostęp do właściwości dynamicznych źródła XML można uzyskać za pomocą prostej notacji w następującym formularzu:

<object>.<dynamic-property>

Właściwości dynamiczne dla tych dwóch klas albo rozpoznają wartość, która może być używana bezpośrednio, lub do indeksatora, który musi zostać dostarczony z indeksem, aby uzyskać wynikową wartość lub kolekcję wartości. Ta ostatnia składnia ma postać:

<object>.<dynamic-property>[<index-value>]

Aby uzyskać więcej informacji, zobacz LINQ to XML Dynamic Properties (Właściwości dynamiczne LINQ to XML).

Aby zaimplementować powiązanie dynamiczne WPF, właściwości dynamiczne będą używane z obiektami udostępnianymi przez System.Windows.Data przestrzeń nazw, zwłaszcza klasą Binding .

Zobacz też