Mik azok a kötési források?

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:

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 PropertyChanged mintát.

    Minden olyan tulajdonságnak, amelynek értesítenie kell egy kötési célt, hogy módosult, egy megfelelő PropertyNameChanged eseménysel rendelkezik, ahol PropertyName a 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