Přehled zdrojů připojení

Ve vazbě dat odkazuje zdrojový objekt vazby na objekt, ze který získáváte data. Toto téma popisuje typy objektů, které můžete použít jako zdroj vazby.

Typy zdrojů vazeb

Datová vazba WPF (Windows Presentation Foundation) podporuje následující typy zdrojů vazeb:

Zdroj vazby Popis
Objekty CLR (Common Language Runtime) Můžete vytvořit vazbu k veřejným vlastnostem, dílčím vlastnostem a indexerům libovolného objektu CLR (Common Language Runtime). Modul vazeb používá reflexi CLR k získání hodnot vlastností. Alternativně objekty, které implementují ICustomTypeDescriptor nebo mají zaregistrovaný, TypeDescriptionProvider také pracují s vazebním modulem.

Další informace o tom, jak implementovat třídu, která může sloužit jako zdroj vazby, naleznete v tématu Implementace třídy pro zdroj vazby dále v tomto tématu.
dynamické objekty Můžete vytvořit vazbu k dostupným vlastnostem a indexerům objektu, který implementuje IDynamicMetaObjectProvider rozhraní. Pokud máte přístup k členu v kódu, můžete s ním vytvořit vazbu. Pokud například dynamický objekt umožňuje přístup k členu v kódu prostřednictvím someObject.AProperty, můžete s ním vytvořit vazbu nastavením cesty vazby na AProperty.
ADO.NET objekty Můžete vytvořit vazbu na ADO.NET objekty, například DataTable. ADO.NET DataView implementuje IBindingList rozhraní, které poskytuje oznámení o změnách, které modul vazeb naslouchá.
Objekty XML Můžete vytvořit vazbu a spouštět XPath dotazy na objektu XmlNode, XmlDocumentnebo XmlElement. Pohodlným způsobem, jak získat přístup k datům XML, které jsou zdrojem vazby v revizích, je použití objektu XmlDataProvider . Další informace naleznete v tématu Vytvoření vazby k datům XML pomocí XMLDataProvider a XPath Dotazy.

Můžete také vytvořit vazbu na nebo XElementXDocumentnebo vytvořit vazbu na výsledky dotazů spuštěných u objektů těchto typů pomocí LINQ to XML. Pohodlný způsob, jak použít LINQ to XML pro přístup k datům XML, která jsou zdrojem vazby v kódu, je použít ObjectDataProvider objekt. Další informace naleznete v tématu Bind to XDocument, XElement nebo LINQ for XML Query Results.
DependencyObject Objekty Můžete vytvořit vazbu na vlastnosti závislosti libovolného DependencyObjectobjektu . Příklad najdete v tématu Vytvoření vazby vlastností dvou ovládacích prvků.

Implementace třídy pro zdroj vazby

Můžete vytvořit vlastní zdroje vazeb. Tato část popisuje, co potřebujete vědět, pokud implementujete třídu, která bude sloužit jako zdroj vazby.

Poskytování oznámení o změnách

Pokud používáte buď nebo OneWayTwoWay vazbu (protože chcete, aby se uživatelské rozhraní aktualizovalo při dynamické změně vlastností zdroje vazby), musíte implementovat vhodný mechanismus oznámení o změně vlastnosti. Doporučeným mechanismem je implementace rozhraní CLR nebo dynamické třídy INotifyPropertyChanged . Další informace naleznete v tématu Implementace oznámení o změně vlastnosti.

Pokud vytvoříte objekt CLR, který neimplementuje INotifyPropertyChanged, musíte zajistit vlastní systém oznámení, aby data použitá ve vazbě zůstala aktuální. Oznámení o změnách můžete poskytnout podporou PropertyChanged vzoru pro každou vlastnost, pro kterou chcete oznámení o změnách změnit. Pro podporu tohoto vzoru definujete událost PropertyNameChanged pro každou vlastnost, kde PropertyName je název vlastnosti. Událost vyvoláte při každé změně vlastnosti.

Pokud váš zdroj vazeb implementuje jeden z těchto mechanismů oznámení, dojde k automatickým aktualizacím cíle. Pokud váš zdroj vazby z nějakého důvodu neposkytuje správné oznámení o změně vlastnosti, máte možnost použít metodu UpdateTarget k aktualizaci cílové vlastnosti explicitně.

Další vlastnosti

Následující seznam obsahuje další důležité body, které je potřeba poznamenat:

  • Pokud chcete vytvořit objekt v XAML, třída musí mít konstruktor bez parametrů. V některýchch

  • Vlastnosti, které použijete jako vlastnosti zdroje vazby pro vazbu, musí být veřejné vlastnosti vaší třídy. Explicitně definované vlastnosti rozhraní nelze získat přístup pro účely vazby ani nelze chránit, soukromé, interní nebo virtuální vlastnosti, které nemají žádnou základní implementaci.

  • Nelze vytvořit vazbu k veřejným polím.

  • Typ vlastnosti deklarované ve vaší třídě je typ, který je předán vazbě. Typ, který vazba nakonec používá, závisí na typu vazby cílové vlastnosti, nikoli na vlastnosti zdroje vazby. Pokud existuje rozdíl v typu, můžete chtít napsat převaděč pro zpracování způsobu, jakým je vlastní vlastnost původně předána vazbě. Další informace najdete na webu IValueConverter.

Použití celých objektů jako zdroje vazby

Jako zdroj vazby můžete použít celý objekt. Zdroj vazby můžete zadat pomocí Source vlastnosti nebo vlastnosti a pak zadat prázdnou DataContext deklaraci vazby: {Binding}. Mezi scénáře, ve kterých je to užitečné, patří vazby na objekty typu string, vazby na objekty s více vlastnostmi, které vás zajímají, nebo vazby na objekty kolekce. Příklad vazby k celému objektu kolekce naleznete v tématu Použití vzoru master-detail s hierarchickými daty.

Mějte na paměti, že možná budete muset použít vlastní logiku, aby data byla smysluplná pro vaši vázanou cílovou vlastnost. Vlastní logika může být ve formě vlastního převaděče (pokud neexistuje výchozí převod typu) nebo DataTemplate. Další informace o převaděčích naleznete v části Převod dat datové vazby Přehled. Další informace o šablonách dat najdete v tématu Přehled šablon dat.

Použití objektů kolekce jako zdroje vazby

Často je objekt, který chcete použít jako zdroj vazby, kolekcí vlastních objektů. Každý objekt slouží jako zdroj pro jednu instanci opakované vazby. Můžete CustomerOrders mít například kolekci, která se skládá z CustomerOrder objektů, kde vaše aplikace iteruje kolekci, abyste zjistili, kolik objednávek existuje a kolik dat v každé z nich obsahuje.

Můžete vytvořit výčet všech kolekcí, které implementují rozhraní IEnumerable. Pokud ale chcete nastavit dynamické vazby tak, aby vložení nebo odstranění v kolekci automaticky aktualizovalo uživatelské rozhraní, musí kolekce implementovat rozhraní INotifyCollectionChanged. Toto rozhraní zveřejňuje událost, která musí být vyvolána při každé změně podkladové kolekce.

Třída ObservableCollection<T> je integrovaná implementace kolekce dat, která zveřejňuje INotifyCollectionChanged rozhraní. Jednotlivé datové objekty v kolekci musí splňovat požadavky popsané v předchozích částech. Příklad najdete v tématu Vytvoření a vytvoření vazby k ObservableCollection. Před implementací vlastní kolekce zvažte použití ObservableCollection<T> nebo některé ze stávajících tříd kolekcí, například List<T>, Collection<T>, BindingList<T> a dalších.

WPF nikdy neváže přímo na kolekci. Pokud zadáte kolekci jako zdroj vazby, WPF ve skutečnosti vytvoří vazbu na výchozí zobrazení kolekce. Informace o výchozích zobrazeních najdete v tématu Přehled datových vazeb.

Pokud máte pokročilý scénář a chcete implementovat vlastní kolekci, zvažte použití IList rozhraní. IList poskytuje ne generickou kolekci objektů, ke kterým lze individuálně přistupovat pomocí indexu, což může zlepšit výkon.

Požadavky na oprávnění v datové vazbě

Při vytváření datových vazeb je nutné zvážit úroveň důvěryhodnosti aplikace. Následující tabulka shrnuje, k jakým typům vlastností je možné v aplikaci, která se spouští v plném vztahu důvěryhodnosti nebo částečné důvěryhodnosti:

Typ vlastnosti

(všechny modifikátory přístupu)
Dynamická vlastnost objektu Dynamická vlastnost objektu CLR – vlastnost CLR – vlastnost Vlastnost závislosti Vlastnost závislosti
Úroveň důvěryhodnosti Plný vztah důvěryhodnosti Částečný vztah důvěryhodnosti Plný vztah důvěryhodnosti Částečný vztah důvěryhodnosti Plný vztah důvěryhodnosti Částečný vztah důvěryhodnosti
Veřejná třída Ano Ano Ano Ano Ano Yes
Neveřejná třída Ano Ne Ano Ne Ano Yes

Tato tabulka popisuje následující důležité body týkající se požadavků na oprávnění v datové vazbě:

  • U vlastností CLR funguje datová vazba, pokud má modul vazeb přístup ke zdrojové vlastnosti vazby pomocí reflexe. V opačném případě modul vazeb vydá upozornění, že vlastnost nelze najít a použije záložní hodnotu nebo výchozí hodnotu, pokud je k dispozici.

  • Můžete vytvořit vazbu na vlastnosti u dynamických objektů definovaných v době kompilace nebo v době běhu.

  • Vždy můžete vytvořit vazbu s vlastnostmi závislosti.

Požadavek na oprávnění pro vazbu XML je podobný. V izolovaném prostoru sandboxu s částečnou důvěryhodností selže, XmlDataProvider pokud nemá oprávnění pro přístup k zadaným datům.

Objekty s anonymním typem jsou interní. Vlastnosti anonymních typů můžete svázat pouze při spuštění v plném vztahu důvěryhodnosti. Další informace o anonymních typech naleznete v tématu Anonymní typy (Průvodce programováním v C#) nebo Anonymní typy (Visual Basic) (Visual Basic).

Další informace o částečném zabezpečení důvěryhodnosti naleznete v tématu WPF Partial Trust Security.

Viz také