Co jsou zdroje vazeb? (WPF .NET)
Ve vazbě dat odkazuje zdrojový objekt vazby na objekt, ze který získáváte data. Tento článek popisuje typy objektů, které můžete použít jako zdroj vazby, jako jsou objekty .NET CLR, XML a DependencyObject objekty.
Typy zdroje vazby
Datová vazba WPF (Windows Presentation Foundation) podporuje následující typy zdrojů vazeb:
Objekty CLR (Common Language Runtime) .NET
Můžete vytvořit vazbu na veřejné vlastnosti, dílčí vlastnosti a indexery libovolného objektu CLR (Common Language Runtime). Modul vazeb používá reflexi CLR k získání hodnot vlastností. Objekty, které implementují ICustomTypeDescriptor nebo mají zaregistrovaný, TypeDescriptionProvider také pracují s vazebním strojem.
Další informace o tom, jak implementovat třídu, která může sloužit jako zdroj vazby, naleznete v tématu Implementace zdroje vazby na objekty dále v tomto článku.
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 naAProperty
.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 najdete v tématu Vytvoření vazby k datům XML pomocí XMLDataProvider a dotazů XPath (.NET Framework).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 (.NET Framework).
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ů (.NET Framework).
Implementace zdroje vazby na objekty
Objekty CLR se můžou stát zdroji vazeb. Při implementaci třídy, která má sloužit jako zdroj vazby, je potřeba mít na paměti několik věcí.
Poskytnutí oznámení o změnách
Pokud používáte buď nebo OneWayTwoWay vazbu, implementujte 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 Postupy: Implementace oznámení o změně vlastnosti (.NET Framework).
Existují dva způsoby, jak upozornit odběratele na změnu vlastnosti:
Implementujte rozhraní INotifyPropertyChanged.
Toto je doporučený mechanismus pro oznámení. Dodává INotifyPropertyChangedPropertyChanged událost, kterou systém vazeb respektuje. Vyvoláním této události a zadáním názvu vlastnosti, která se změnila, oznámíte cílové vazbě změny.
Implementujte
PropertyChanged
vzor.Každá vlastnost, která potřebuje upozornit cíl vazby, že se změnil, má odpovídající
PropertyNameChanged
událost, kdePropertyName
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 vazeb z nějakého důvodu neposkytuje oznámení o změně správné vlastnosti, můžete metodu UpdateTarget použít k explicitní aktualizaci cílové vlastnosti.
Další vlastnosti
Následující seznam obsahuje další důležité body, které je potřeba poznamenat:
Datové objekty, které slouží jako zdroje vazeb, lze deklarovat v JAZYCE XAML jako prostředky za předpokladu , že mají konstruktor bez parametrů. V opačném případě je nutné vytvořit datový objekt v kódu a přímo ho přiřadit buď k datovému kontextu stromu objektu XAML, nebo jako zdroj vazby vazby.
Vlastnosti, které používáte jako vlastnosti zdroje vazby, musí být veřejné vlastnosti vaší třídy. Explicitně definované vlastnosti rozhraní nelze získat přístup k účelům vazby ani k chráněným, privátním, interním nebo virtuálním vlastnostem, 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 vaše vlastní vlastnost původně předána vazbě. Další informace najdete na webu IValueConverter.
Celé objekty jako zdroj vazby
Jako zdroj vazby můžete použít celý objekt. Zadejte zdroj vazby pomocí Source vlastnosti nebo vlastnosti a pak zadejte 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 (.NET Framework).
Možná budete muset použít vlastní logiku, aby data byla pro vlastnost vašeho cíle smysluplná. Vlastní logika může být ve formě vlastního převaděče nebo DataTemplate. Další informace o převaděčích naleznete v tématu Převod dat. Další informace o šablonách dat najdete v tématu Přehled šablon dat (.NET Framework).
Objekty kolekce jako zdroj 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 nad kolekcí, abyste zjistili, kolik objednávek existuje a kolik dat v každé objednávce 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 naleznete v tématu Vytvoření a vytvoření vazby na ObservableCollection (.NET Framework). Než implementujete vlastní kolekci, zvažte použití ObservableCollection<T> nebo některou z existujících tříd kolekcí, například List<T>, Collection<T>a BindingList<T>, mimo jiné.
Když jako zdroj vazby zadáte kolekci, WPF se neváže přímo s kolekcí. Místo toho WPF ve skutečnosti vytvoří vazbu na výchozí zobrazení kolekce. Informace o výchozích zobrazeních najdete v tématu Použití výchozího zobrazení.
Pokud máte pokročilý scénář a chcete implementovat vlastní kolekci, zvažte použití IList rozhraní. Toto rozhraní 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ě
Na rozdíl od rozhraní .NET Framework běží .NET s úplným zabezpečením důvěryhodnosti. Všechny datové vazby se spouští se stejným přístupem jako uživatel, který aplikaci spouští.
Viz také
.NET Desktop feedback