Sdílet prostřednictvím


Přehled zdrojů vazeb

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ů vázání

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í zaregistrovanou 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 rozhraní IDynamicMetaObjectProvider. 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 rozhraní IBindingList, které poskytuje oznámení o změnách, na které vazební modul naslouchá.
Objekty XML Můžete napojit a spouštět dotazy XPath na XmlNode, XmlDocumentnebo XmlElement. Pohodlný způsob, jak získat přístup k datům XML, které jsou zdrojem vazby v kódu, je použít XmlDataProvider objekt. Pro více informací viz Vazba na data XML pomocí XMLDataProvider a dotazů XPath.

Můžete také vytvořit vazbu na XElement nebo XDocumentnebo vytvořit vazbu na výsledky dotazů spuštěných na objektech 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 DependencyObject. 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 vazbu OneWay nebo TwoWay (protože chcete, aby se uživatelské rozhraní při dynamické změně vlastností zdroje vazby aktualizovalo), musíte implementovat vhodný mechanismus oznámení o změně vlastnosti. Doporučuje se, aby CLR nebo dynamická třída implementovaly rozhraní INotifyPropertyChanged. Další informace naleznete v tématu Implementujte 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 poskytovat podporou vzoru PropertyChanged pro každou vlastnost, pro kterou chcete oznámení o změnách. Pro podporu tohoto vzoru definujete PropertyNameZměněná událost pro každou vlastnost, kde PropertyName je název vlastnosti. Událost vyvoláte vždy, když dojde ke změně vlastnosti.

Pokud váš zdroj vazby implementuje jeden z těchto oznamovacích mechanismů, cílové aktualizace probíhají automaticky. Pokud váš zdroj vazeb z nějakého důvodu neposkytuje správná oznámení o změně vlastnosti, máte možnost použít metodu UpdateTarget aktualizovat cílovou vlastnost 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ých .NET jazycích, jako je C#, může být pro vás vytvořen konstruktor bez parametrů.

  • Vlastnosti, které používáte jako zdrojové vlastnosti pro vazbu, musí být veřejnými vlastnostmi vaší třídy. Explicitně definované vlastnosti rozhraní nelze použít pro účely vazby, stejně tak nelze přistupovat k chráněným, soukromým, interním nebo virtuálním vlastnostem, které nemají 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řevodník, který zpracuje, jak je vaše vlastní vlastnost původně předána do vazby. Další informace najdete v tématu 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 nebo vlastnosti DataContext a pak zadat prázdnou 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 na celý objekt kolekce najdete v části Použití Patternu 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 mít podobu personalizovaného převodníku (pokud neexistuje výchozí převod tohoto typu) nebo DataTemplate. Další informace o převaděčích naleznete v sekci Převod dat Přehled datových vazeb. 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 mít například kolekci CustomerOrders, která se skládá z CustomerOrder objektů, kde vaše aplikace iteruje kolekci, aby určila, kolik objednávek existuje a kolik dat v každé z nich obsahuje.

Můžete vytvořit výčet nad libovolnou kolekcí, která implementuje 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 rozhraní INotifyCollectionChanged. 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 nastavení vazby naObservableCollection. Před implementací vlastní kolekce zvažte použití ObservableCollection<T> nebo jedné z existujících tříd kolekce, jako jsou List<T>, Collection<T>a BindingList<T>, mimo jiné.

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 naleznete v části Přehled datové vazby.

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 přistupovat jednotlivě 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é se vázat v aplikaci, která se spouští s plnou důvěrou nebo částečnou důvěrou.

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á důvěra Částečná důvěra úplná důvěra Omezená důvěra úplný vztah důvěryhodnosti částečná důvěra
Veřejná třída Ano Ano Ano Ano Ano Ano
Neveřejná třída Ano Ne Ano Ne Ano Ano

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 sandboxu s částečnou důvěryhodností XmlDataProvider selže, pokud nemá oprávnění k přístupu 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é důvěře. Další informace o anonymních typech najdete 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é