Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az adatkötésben a kötés forrásobjektuma arra az objektumra hivatkozik, amelyből adatokat szerez be. Ez a cikk a kötésforrásként használható objektumok típusait ismerteti, például .NET CLR-objektumokat, XML-objektumokat és DependencyObject objektumokat.
Kötési forrástípusok
A Windows Presentation Foundation (WPF) adatkötése a következő kötési forrástípusokat támogatja:
.NET közös nyelvi futtatókörnyezet (CLR) objektumok
Bármely közös nyelvi futtatókörnyezeti objektum (CLR) nyilvános tulajdonságaihoz, altulajdonságaihoz és indexelőihez kapcsolódhat. A kötési motor CLR-tükröződést használ a tulajdonságok értékeinek lekéréséhez. Az olyan objektumok, amelyek ICustomTypeDescriptor-t implementálnak vagy regisztrált TypeDescriptionProvider-el rendelkeznek, szintén működnek a kötési motorral.
A kötésforrásként használható osztály implementálásáról a cikk későbbi, Kötésforrás implementálása az objektumokon című cikkben talál további információt.
dinamikus objektumok
A IDynamicMetaObjectProvider felületet megvalósító objektumok elérhető tulajdonságaihoz és indexelőihez is csatlakozhat. Ha elérheti a tagot a kódban, hozzá kötheti. Ha például egy dinamikus objektum lehetővé teszi, hogy a kód egy tagját
SomeObject.APropertykeresztül érje el, akkor a kötési útvonalAPropertybeállításával csatlakozhat hozzá.ADO.NET objektumok
Képes vagy ADO.NET objektumokhoz, például DataTable-hoz kötődni. A ADO.NET DataView implementálja a IBindingList felületet, amely a kötésmotor által figyelt változásértesítéseket nyújt.
XML-objektumok
Ön
XPath, XmlNodevagy XmlDocumenteszközhöz kapcsolódhat és futtathat XmlElement lekérdezéseket. A jelölés kötési forrását képező XML-adatok elérésének kényelmes módja egy XmlDataProvider objektum használata. További információ: Kötés XML-adatokhoz XMLDataProvider és XPath-lekérdezések (.NET-keretrendszer) használatával.Kapcsolódhat egy XElement-hoz vagy XDocument-hez, vagy a LINQ XML-lel használatával kapcsolódhat az ilyen típusú objektumok lekérdezéseinek eredményeihez. A LINQ to XML használatával kényelmesen elérheti az adatkötési forrásként szolgáló XML-adatokat, ha egy ObjectDataProvider objektumot használ. További információ: Kötés XDocumenthez, XElementhez vagy LINQ-hoz XML-lekérdezési eredményekhez (.NET-keretrendszer).
DependencyObject objektumok
Kötheti magát bármely DependencyObjectfüggőségi tulajdonságaihoz. Példa: Két vezérlő tulajdonságainak kötése (.NET-keretrendszer).
Kötési forrás implementálása az objektumokon
A CLR-objektumok kötési forrásokká válhatnak. Az osztály kötési forrásként való megvalósításakor figyelembe kell venni néhány dolgot.
Változásértesítések megadása
Ha OneWay vagy TwoWay kötést használ, implementáljon egy megfelelő "tulajdonságmódosítás" értesítési mechanizmust. Az ajánlott mechanizmus az, hogy a CLR vagy a dinamikus osztály implementálja a INotifyPropertyChanged felületet. További információ: Tulajdonságváltozás-értesítés (.NET-keretrendszer) implementálása.
Kétféleképpen értesítheti az előfizetőt egy tulajdonságváltozásról:
Implementálja az INotifyPropertyChanged felületet.
Ez az értesítések ajánlott mechanizmusa. A INotifyPropertyChanged biztosítja a PropertyChanged eseményt, amelyet a kötési rendszer tiszteletben tart. Az esemény kiváltásával és a módosított tulajdonság nevének megadásával értesíti a kötési célt a változásról.
Implementálja a
PropertyChangedmintát.Minden olyan tulajdonságnak, amelynek értesítenie kell egy kötési célt, hogy módosult, egy megfelelő
PropertyNameChangedeseménysel rendelkezik, aholPropertyNamea tulajdonság neve. Az eseményt minden alkalommal ki kell váltani, amikor a tulajdonság megváltozik.
Ha a kötési forrás implementálja ezen értesítési mechanizmusok egyikét, a célfrissítések automatikusan történnek. Ha bármilyen okból a kötési forrás nem adja meg a megfelelő módosított tulajdonságértesítéseket, a UpdateTarget metódussal explicit módon frissítheti a céltulajdonságot.
Egyéb jellemzők
Az alábbi lista további fontos megjegyzéseket tartalmaz:
A kötési forrásként szolgáló adatobjektumok az XAML-ben deklarálhatók erőforrásokként, feltéve, hogy paraméter nélküli konstruktor. Ellenkező esetben az adatobjektumot kódban kell létrehoznia, és közvetlenül hozzá kell rendelnie az XAML-objektumfa adatkörnyezetéhez, vagy a kötés kötési forrásaként.
A kötésforrás-tulajdonságokként használt tulajdonságoknak az osztály nyilvános tulajdonságainak kell lenniük. A explicit módon definiált felülettulajdonságok nem érhetők el kötési célokra, és nem lehetnek olyan védett, privát, belső vagy virtuális tulajdonságok, amelyek nem rendelkeznek alapszintű implementációval.
Nyilvános mezőkhöz nem lehet csatlakozni.
Az osztályban deklarált tulajdonság típusa az a típus, amelyet a kötésnek átadnak. A kötés által végül használt típus azonban a kötési céltulajdonság típusától függ, nem pedig a kötés forrástulajdonságától. Ha típusbeli különbség van, érdemes lehet konvertert írni, hogy kezelje az egyéni tulajdonság kezdeti átadását a kötésnek. További információért lásd IValueConverter.
Teljes objektumok kötési forrásként
Egy teljes objektumot használhat kötési forrásként. Adjon meg egy kötésforrást a Source vagy a DataContext tulajdonság használatával, majd adjon meg egy üres kötési deklarációt: {Binding}. A hasznos forgatókönyvek közé tartozik a karakterlánc típusú objektumokhoz való kötés, a több tulajdonsággal rendelkező objektumokhoz való kötés, vagy a gyűjteményobjektumokhoz való kötés. Egy teljes gyűjteményobjektumhoz való kötésre példa: A Master-Detail minta használata hierarchikus adatokkal (.NET-keretrendszer).
Előfordulhat, hogy egyéni logikát kell alkalmaznia, hogy az adatok értelmesek legyenek a kapcsolt céltulajdonság számára. Az egyéni logika lehet egy egyéni konverter vagy előfordulhat DataTemplateformájában. A konverterekkel kapcsolatos további információért lásd Adatkonvertálás. További információ az adatsablonokról: Data Templating Overview (.NET Framework).
Gyűjteményobjektumok kötési forrásként
A kötésforrásként használni kívánt objektum gyakran egyéni objektumok gyűjteménye. Minden objektum egy ismétlődő kötés egy példányának forrásaként szolgál. Lehet például egy CustomerOrders gyűjtemény, amely CustomerOrder objektumokból áll, ahol az alkalmazás iterálja a gyűjteményt annak megállapításához, hogy hány rendelés létezik, és az egyes megrendelésekben szereplő adatok.
Felsorolhat bármely gyűjteményt, amely megvalósítja a IEnumerable felületet. Ha azonban dinamikus kötéseket szeretne beállítani, hogy a gyűjteménybe történő beszúrások vagy törlések automatikusan frissítsák a felhasználói felületet, a gyűjteménynek implementálnia kell a INotifyCollectionChanged felületet. Ez a felület egy eseményt tesz elérhetővé, amelyet a mögöttes gyűjtemény változásakor létre kell tenni.
A ObservableCollection<T> osztály egy olyan adatgyűjtés beépített implementációja, amely elérhetővé teszi a INotifyCollectionChanged felületet. A gyűjteményen belüli egyes adatobjektumoknak meg kell felelniük az előző szakaszokban leírt követelményeknek. Például lásd: ObservableCollection (a .NET-keretrendszer) létrehozása és kötése. A saját gyűjtemény implementálása előtt fontolja meg a ObservableCollection<T> vagy a meglévő gyűjteményosztályok egyikét, például List<T>, Collection<T>és BindingList<T>használatát.
Ha kötésforrásként ad meg gyűjteményt, a WPF nem köti közvetlenül a gyűjteményhez. Ehelyett a WPF valójában a gyűjtemény alapértelmezett nézetéhez kapcsolódik. Az alapértelmezett nézetekkel kapcsolatos információkért lásd: Alapértelmezett nézet használata.
Ha speciális forgatókönyvvel rendelkezik, és saját gyűjteményt szeretne implementálni, fontolja meg a IList felület használatát. Ez az interfész nem általános objektumgyűjteményt biztosít, amelyet az indexek egyenként érhetnek el, ami javíthatja a teljesítményt.
Az adatkötés engedélykövetelményei
A .NET-keretrendszertől eltérően a .NET teljes megbízhatósági biztonsággal fut. Minden adatkötés ugyanazzal a hozzáféréssel fut, mint az alkalmazást futtató felhasználó.
Lásd még
.NET Desktop feedback