Co to są źródła powiązań? (WPF .NET)
W powiązaniu danych obiekt źródłowy powiązania odwołuje się do obiektu, z którego uzyskujesz dane. W tym artykule omówiono typy obiektów, których można użyć jako źródła powiązania, takich jak obiekty CLR platformy .NET, XML i DependencyObject obiekty.
Wiązanie typów źródeł
Powiązanie danych programu Windows Presentation Foundation (WPF) obsługuje następujące typy źródeł powiązań:
Obiekty środowiska uruchomieniowego języka wspólnego platformy .NET (CLR)
Można powiązać z właściwościami publicznymi, podwłaściami i indeksatorami dowolnego obiektu środowiska uruchomieniowego języka wspólnego (CLR). Aparat powiązania używa odbicia CLR, aby uzyskać wartości właściwości. Obiekty implementujące ICustomTypeDescriptor lub zarejestrowane TypeDescriptionProvider również współpracują z aparatem powiązania.
Aby uzyskać więcej informacji na temat implementowania klasy, która może służyć jako źródło powiązania, zobacz Implementowanie źródła powiązania na obiektach w dalszej części tego artykułu.
Obiekty dynamiczne
Można powiązać z dostępnymi właściwościami i indeksatorami obiektu, który implementuje IDynamicMetaObjectProvider interfejs. Jeśli możesz uzyskać dostęp do elementu członkowskiego w kodzie, możesz go powiązać. Jeśli na przykład obiekt dynamiczny umożliwia dostęp do elementu członkowskiego w kodzie za pośrednictwem
SomeObject.AProperty
metody , możesz powiązać go, ustawiając ścieżkę powiązania naAProperty
.obiekty ADO.NET
Można powiązać z obiektami ADO.NET, takimi jak DataTable. DataView ADO.NET implementuje IBindingList interfejs, który udostępnia powiadomienia o zmianie, na których nasłuchuje aparat powiązania.
Obiekty XML
Możesz powiązać i uruchomić
XPath
zapytania w obiekcie XmlNode, XmlDocumentlub XmlElement. Wygodnym sposobem uzyskiwania dostępu do danych XML, które jest źródłem powiązania w adiustacji, jest użycie XmlDataProvider obiektu. Aby uzyskać więcej informacji, zobacz Wiązanie z danymi XML przy użyciu elementu XMLDataProvider i zapytań XPath (.NET Framework).Można również powiązać element z elementem XElement lub XDocumentlub powiązać z wynikami zapytań uruchamianych na obiektach tych typów przy użyciu linQ to XML. Wygodnym sposobem używania LINQ to XML do uzyskiwania dostępu do danych XML, które jest źródłem powiązania w adiustacji, jest użycie ObjectDataProvider obiektu. Aby uzyskać więcej informacji, zobacz Bind to XDocument, XElement lub LINQ for XML Query Results (.NET Framework).
DependencyObject Obiektów
Można powiązać z właściwościami zależności dowolnego DependencyObjectelementu . Aby zapoznać się z przykładem, zobacz Wiązanie właściwości dwóch kontrolek (.NET Framework).
Implementowanie źródła powiązania na obiektach
Obiekty CLR mogą stać się źródłami powiązań. Istnieje kilka kwestii, o których należy pamiętać podczas implementowania klasy, która będzie służyć jako źródło powiązania.
Podaj powiadomienia o zmianie
Jeśli używasz powiązania OneWay lub TwoWay , zaimplementuj odpowiedni mechanizm powiadamiania o zmianie właściwości. Zalecanym mechanizmem jest implementacja interfejsu przez clR lub klasę dynamiczną INotifyPropertyChanged . Aby uzyskać więcej informacji, zobacz How to: Implement Property Change Notification (.NET Framework).
Istnieją dwa sposoby powiadamiania subskrybenta o zmianie właściwości:
Zaimplementuj interfejs INotifyPropertyChanged.
Jest to zalecany mechanizm powiadomień. PropertyChanged Dostarcza INotifyPropertyChanged zdarzenie, które jest zgodne z systemem powiązań. Podnosząc to zdarzenie i podając nazwę zmienionej właściwości, powiadomisz element docelowy powiązania zmiany.
Zaimplementuj
PropertyChanged
wzorzec.Każda właściwość, która musi powiadomić obiekt docelowy powiązania o jego zmianie, ma odpowiednie
PropertyNameChanged
zdarzenie, gdziePropertyName
jest nazwą właściwości. Zdarzenie jest wywoływane za każdym razem, gdy zmienia się właściwość.
Jeśli źródło powiązania implementuje jeden z tych mechanizmów powiadomień, aktualizacje docelowe są wykonywane automatycznie. Jeśli z jakiegokolwiek powodu źródło powiązania nie udostępnia odpowiednich powiadomień o zmianie właściwości, możesz użyć UpdateTarget metody , aby jawnie zaktualizować właściwość docelową.
Inne cechy
Poniższa lista zawiera inne ważne kwestie do zapamiętania:
Obiekty danych, które służą jako źródła powiązań, mogą być deklarowane w języku XAML jako zasoby, pod warunkiem że mają konstruktor bez parametrów. W przeciwnym razie należy utworzyć obiekt danych w kodzie i przypisać go bezpośrednio do kontekstu danych drzewa obiektów XAML lub jako źródło powiązania powiązania.
Właściwości używane jako właściwości źródła powiązania muszą być właściwościami publicznymi klasy. Jawnie zdefiniowane właściwości interfejsu nie mogą być dostępne do celów powiązania ani nie mogą być chronione, prywatne, wewnętrzne lub wirtualne właściwości, które nie mają implementacji podstawowej.
Nie można powiązać z polami publicznymi.
Typ właściwości zadeklarowanej w klasie jest typem przekazywanym do powiązania. Jednak typ ostatecznie używany przez powiązanie zależy od typu właściwości docelowej powiązania, a nie właściwości źródłowej powiązania. Jeśli istnieje różnica w typie, możesz napisać konwerter, aby obsłużyć sposób, w jaki właściwość niestandardowa jest początkowo przekazywana do powiązania. Aby uzyskać więcej informacji, zobacz IValueConverter.
Całe obiekty jako źródło powiązania
Można użyć całego obiektu jako źródła powiązania. Określ źródło powiązania przy użyciu Source właściwości lub DataContext , a następnie podaj pustą deklarację powiązania: {Binding}
. Scenariusze, w których jest to przydatne, obejmują powiązanie z obiektami, które są ciągiem typu, powiązaniem z obiektami z wieloma właściwościami, które cię interesują, lub powiązaniem z obiektami kolekcji. Przykład powiązania z całym obiektem kolekcji można znaleźć w temacie How to Use the Master-Detail Pattern with Hierarchical Data (.NET Framework) (Jak używać wzorca master-detail z danymi hierarchicznymi (.NET Framework).
Może być konieczne zastosowanie logiki niestandardowej, aby dane miały znaczenie dla powiązanej właściwości docelowej. Logika niestandardowa może być w postaci konwertera niestandardowego lub DataTemplate. Aby uzyskać więcej informacji na temat konwerterów, zobacz Konwersja danych. Aby uzyskać więcej informacji na temat szablonów danych, zobacz Omówienie szablonów danych (.NET Framework).
Obiekty kolekcji jako źródło powiązania
Często obiekt, którego chcesz użyć jako źródło powiązania, jest kolekcją obiektów niestandardowych. Każdy obiekt służy jako źródło dla jednego wystąpienia powtarzającego się powiązania. Na przykład może istnieć CustomerOrders
kolekcja składająca się z CustomerOrder
obiektów, w których aplikacja iteruje w kolekcji, aby określić liczbę zamówień i dane zawarte w poszczególnych zamówieniach.
Możesz wyliczyć dowolną kolekcję, która implementuje interfejs IEnumerable. Aby jednak skonfigurować powiązania dynamiczne tak, aby wstawienie lub usunięcie w kolekcji automatycznie zaktualizowało interfejs użytkownika, kolekcja musi zaimplementować interfejs INotifyCollectionChanged. Ten interfejs uwidacznia zdarzenie, które należy zgłaszać za każdym razem, gdy podstawowa kolekcja ulegnie zmianie.
Klasa ObservableCollection<T> to wbudowana implementacja kolekcji danych, która uwidacznia INotifyCollectionChanged interfejs. Poszczególne obiekty danych w kolekcji muszą spełniać wymagania opisane w poprzednich sekcjach. Aby zapoznać się z przykładem, zobacz How to Create and Bind to an ObservableCollection (.NET Framework) (Jak utworzyć i powiązać z obiektem ObservableCollection (.NET Framework). Przed wdrożeniem własnej kolekcji rozważ użycie ObservableCollection<T> lub jedną z istniejących klas kolekcji, takich jak List<T>, Collection<T>i BindingList<T>, między innymi.
Po określeniu kolekcji jako źródła powiązania platforma WPF nie wiąże się bezpośrednio z kolekcją. Zamiast tego WPF faktycznie wiąże się z domyślnym widokiem kolekcji. Aby uzyskać informacje o widokach domyślnych, zobacz Używanie widoku domyślnego.
Jeśli masz zaawansowany scenariusz i chcesz zaimplementować własną kolekcję, rozważ użycie interfejsu IList . Ten interfejs udostępnia niegeneryjną kolekcję obiektów, do których można uzyskać dostęp indywidualnie według indeksu, co może poprawić wydajność.
Wymagania dotyczące uprawnień w powiązaniu danych
W przeciwieństwie do programu .NET Framework platforma .NET działa z zabezpieczeniami o pełnym zaufaniu. Wszystkie powiązania danych są uruchamiane z tym samym dostępem co użytkownik, na którym jest uruchomiona aplikacja.
Zobacz też
.NET Desktop feedback