Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I databindningen refererar det bindande källobjektet till det objekt som du hämtar data från. I den här artikeln beskrivs de typer av objekt som du kan använda som bindningskälla, till exempel .NET CLR-objekt, XML och DependencyObject objekt.
Bindning av källtyper
Databindningen för Windows Presentation Foundation (WPF) stöder följande typer av bindningskällor:
CLR-objekt (Common Language Runtime) för .NET
Du kan binda till offentliga egenskaper, underegenskaper och indexerare för alla CLR-objekt (Common Language Runtime). Bindningsmotorn använder CLR-reflektion för att hämta egenskapernas värden. Objekt som implementerar ICustomTypeDescriptor eller har en registrerad TypeDescriptionProvider fungerar också med bindningsmotorn.
Mer information om hur du implementerar en klass som kan fungera som en bindningskälla finns i Implementera en bindningskälla för dina objekt senare i den här artikeln.
Dynamiska objekt
Du kan binda till tillgängliga egenskaper och indexerare för ett objekt som implementerar IDynamicMetaObjectProvider gränssnittet. Om du kan komma åt medlemmen i koden kan du binda till den. Om ett dynamiskt objekt till exempel gör att du kan komma åt en medlem i kod via
SomeObject.APropertykan du binda till den genom att ange bindningssökvägen tillAProperty.ADO.NET objekt
Du kan binda till ADO.NET objekt, till exempel DataTable. ADO.NET DataView implementerar gränssnittet, vilket ger ändringsmeddelanden IBindingList som bindningsmotorn lyssnar efter.
XML-objekt
Du kan binda till och köra
XPathfrågor på en XmlNode, XmlDocument eller XmlElement. Ett praktiskt sätt att komma åt XML-data som är bindningskällan i markering är att använda ett XmlDataProvider objekt. Mer information finns i Binda till XML-data med hjälp av en XMLDataProvider- och XPath-frågor (.NET Framework).Du kan också binda till en XElement eller XDocument, eller binda till resultaten av frågor som utförs på objekt av dessa typer med hjälp av LINQ till XML. Ett praktiskt sätt att använda LINQ till XML för att komma åt XML-data som är bindningskällan i markering är att använda ett ObjectDataProvider objekt. Mer information finns i Bind till XDocument, XElement eller LINQ för XML-frågeresultat (.NET Framework).
DependencyObject Objekt
Du kan binda till beroendeegenskaper för valfri DependencyObject. Ett exempel finns i Binda egenskaperna för två kontroller (.NET Framework).
Implementera en bindningskälla för dina objekt
Dina CLR-objekt kan bli bindningskällor. Det finns några saker att tänka på när du implementerar en klass för att fungera som en bindningskälla.
Ange ändringsmeddelanden
Om du använder antingen OneWay eller TwoWay bindning, implementera en lämplig meddelandemekanism för "egenskapsändring". Den rekommenderade mekanismen är att CLR-klassen eller den dynamiska klassen implementerar INotifyPropertyChanged gränssnittet. Mer information finns i How to: Implement Property Change Notification (.NET Framework).
Det finns två sätt att meddela en prenumerant om en egenskapsändring:
Implementera INotifyPropertyChanged-gränssnittet.
Det här är den rekommenderade mekanismen för meddelanden. INotifyPropertyChanged levererar händelsen PropertyChanged, som det bindande systemet respekterar. Genom att skapa den här händelsen och ange namnet på den egenskap som ändrades meddelar du ett bindande mål för ändringen.
Implementera
PropertyChanged-mönstret.Varje egenskap som behöver meddela ett bindningsmål att det har ändrats, har en motsvarande
PropertyNameChangedhändelse, därPropertyNameär namnet på egenskapen. Du genererar händelsen varje gång egenskapen ändras.
Om bindningskällan implementerar någon av dessa meddelandemekanismer sker måluppdateringar automatiskt. Om bindningskällan av någon anledning inte ger korrekta meddelanden om egenskapsändringar kan du använda UpdateTarget-metoden för att uppdatera målegenskapen explicit.
Andra egenskaper
Följande lista innehåller andra viktiga punkter att notera:
Dataobjekt som fungerar som bindningskällor kan deklareras i XAML som resurser, förutsatt att de har en parameterlös konstruktor. Annars måste du skapa dataobjektet i koden och direkt tilldela det till antingen datakontexten för ditt XAML-objektträd eller som bindningskälla för bindning.
De egenskaper som du använder som bindningskällegenskaper måste vara publika egenskaper för din klass. Explicit definierade gränssnittsegenskaper kan inte nås i bindningssyfte, och inte heller skyddade, privata, interna eller virtuella egenskaper utan baskodimplementering.
Du kan inte binda till publika fält.
Typen av egenskapen som deklareras i klassen är den typ som skickas till bindningen. Vilken typ som slutligen används av bindningen beror dock på typen av bindningsmålegenskap, inte på bindningskällans egenskap. Om det finns en skillnad i typ kanske du vill skriva en konverterare för att hantera på vilket sätt din anpassade egenskap ursprungligen överförs till bindningen. Mer information finns i IValueConverter.
Hela objekt som bindningskälla
Du kan använda ett helt objekt som bindningskälla. Ange bindningskällan med Source- eller DataContext-egenskapen, och ange sedan en tom bindningsdeklaration: {Binding}. Scenarier där detta är användbart är bindning till objekt som är av typen sträng, bindning till objekt med flera egenskaper som du är intresserad av eller bindning till samlingsobjekt. Ett exempel på hur man binder till ett helt samlingsobjekt kan ses i How to Use the Master-Detail Pattern with Hierarchical Data (.NET Framework).
Du kan behöva tillämpa anpassad logik så att data är meningsfull för din bundna målparameter. Den anpassade logiken kan vara i form av en anpassad konverterare eller en DataTemplate. Mer information om konverterare finns i Datakonvertering. Mer information om datamallar finns i Översikt över datamallning (.NET Framework).
Samlingsobjekt som bindningskälla
Ofta är det objekt som du vill använda som bindningskälla en samling anpassade objekt. Varje objekt fungerar som källa för en instans av en upprepad bindning. Du kan till exempel ha en CustomerOrders samling som består av CustomerOrder objekt, där ditt program itererar över samlingen för att avgöra hur många beställningar som finns och vilka data som finns i varje ordning.
Du kan räkna upp alla samlingar som implementerar IEnumerable-gränssnittet. Men för att konfigurera dynamiska bindningar så att infogningar eller borttagningar i samlingen uppdaterar användargränssnittet automatiskt måste samlingen implementera INotifyCollectionChanged-gränssnittet. Det här gränssnittet exponerar en händelse som måste aktiveras när den underliggande samlingen ändras.
Klassen ObservableCollection<T> är en inbyggd implementering av en datainsamling som exponerar INotifyCollectionChanged gränssnittet. De enskilda dataobjekten i samlingen måste uppfylla de krav som beskrivs i föregående avsnitt. Ett exempel finns i How to Create and Bind to an ObservableCollection (.NET Framework). Innan du implementerar din egen samling bör du överväga att använda ObservableCollection<T> eller någon av de befintliga samlingsklasserna, till exempel List<T>, Collection<T>och BindingList<T>, bland många andra.
När du anger en samling som en bindningskälla binder WPF inte direkt till samlingen. I stället binder WPF faktiskt till samlingens standardvy. Information om standardvyer finns i Använda en standardvy.
Om du har ett avancerat scenario och vill implementera din egen samling bör du överväga att använda IList gränssnittet. Det här gränssnittet innehåller en icke-allmän samling objekt som kan nås individuellt av index, vilket kan förbättra prestandan.
Behörighetskrav i databindning
Till skillnad från .NET Framework körs .NET med fullständig säkerhet. Alla databindningar körs med samma åtkomst som användaren som kör programmet.
Se även
.NET Desktop feedback