Nyheter i WPF version 4.5
Det här avsnittet innehåller information om nya och förbättrade funktioner i Windows Presentation Foundation (WPF) version 4.5.
Det här avsnittet innehåller följande avsnitt:
Förbättrad prestanda vid visning av stora uppsättningar grupperade data
Ompositionera data när data-värden ändras (Uppdatering i realtid)
förbättrat stöd för att skapa en svag referens till en händelse
Menyflikskontroll
WPF 4.5 levereras med en Ribbon-kontroll som innehåller verktygsfältet Snabbåtkomst, Programmeny och flikar. För mer information, se översikt över menyfliksområdet.
Bättre prestanda vid visning av stora uppsättningar grupperade data
Virtualisering av användargränssnitt inträffar när en delmängd av användargränssnittselement genereras från ett större antal dataobjekt baserat på vilka objekt som visas på skärmen. VirtualizingPanel definierar den IsVirtualizingWhenGrouping anslutna egenskapen som möjliggör virtualisering av användargränssnittet för grupperade data. Mer information om att gruppera data finns i Så här sorterar du och grupperar data med hjälp av en vy i XAML. Mer information om hur du virtualiserar grupperade data finns i egenskapen IsVirtualizingWhenGrouping bifogad.
Nya funktioner för VirtualizingPanel
Du kan ange om en VirtualizingPanel, till exempel VirtualizingStackPanel, visar partiella objekt med hjälp av egenskapen ScrollUnit bifogad. Om ScrollUnit är inställt på Itemvisar VirtualizingPanel endast objekt som är helt synliga. Om ScrollUnit är inställt på Pixelkan VirtualizingPanel visa delvis synliga objekt.
Du kan ange storleken på cachen före och efter visningsporten när VirtualizingPanel virtualiseras med hjälp av den bifogade egenskapen CacheLength. Cachen är mängden utrymme ovanför eller under det visningsområde där objekt inte virtualiseras. Att använda en cache för att undvika att generera gränssnittselement när de rullas i vyn kan förbättra prestandan. Cachen fylls med lägre prioritet så att programmet inte blir okänsligt under åtgärden. Egenskapen VirtualizingPanel.CacheLengthUnit avgör vilken måttenhet som används av VirtualizingPanel.CacheLength.
Bindning till statiska egenskaper
Du kan använda statiska egenskaper som källa för en databindning. Databindningsmotorn identifierar när egenskapens värde ändras om en statisk händelse utlöses. Om klassen SomeClass
till exempel definierar en statisk egenskap som kallas MyProperty
kan SomeClass
definiera en statisk händelse som utlöses när värdet för MyProperty
ändras. Den statiska händelsen kan använda någon av följande signaturer.
public static event EventHandler MyPropertyChanged;
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
Observera att i det första fallet exponerar klassen en statisk händelse med namnet PropertyNameChanged
som skickar EventArgs till händelsehanteraren. I det andra fallet exponerar klassen en statisk händelse med namnet StaticPropertyChanged
som skickar PropertyChangedEventArgs till händelsehanteraren. En klass som implementerar den statiska egenskapen kan välja att skapa egenskapsändringsmeddelanden med någon av metoderna.
Åtkomst till samlingar på icke-gränssnittstrådar
MED WPF kan du komma åt och ändra datasamlingar på andra trådar än den som skapade samlingen. På så sätt kan du använda en bakgrundstråd för att ta emot data från en extern källa, till exempel en databas, och visa data i användargränssnittstråden. Genom att använda en annan tråd för att ändra samlingen förblir användargränssnittet responsivt för användarinteraktion.
Validera data synkront och asynkront
Med INotifyDataErrorInfo-gränssnittet kan dataentitetsklasser implementera anpassade valideringsregler och visa valideringsresultat asynkront. Det här gränssnittet stöder även anpassade felobjekt, flera fel per egenskap, fel mellan egenskaper och fel på entitetsnivå. Mer information finns i INotifyDataErrorInfo.
Uppdatera databindningens källa automatiskt
Om du använder en databindning för att uppdatera en datakälla kan du använda egenskapen Delay för att ange hur lång tid som ska överföras efter att egenskapen har ändrats på målet innan källan uppdateras. Anta till exempel att du har en Slider som har sina Value egenskapsdata tvåvägsbundna till en egenskap för ett dataobjekt och egenskapen UpdateSourceTrigger är inställd på PropertyChanged. I det här exemplet, när användaren flyttar Slider, uppdateras källan för varje pixel som Slider flyttar. Källobjektet behöver vanligtvis bara skjutreglagets värde när skjutreglagets Value slutar ändras. Om du vill förhindra att källan uppdateras för ofta använder du Delay för att ange att källan inte ska uppdateras förrän en viss tid förflutit när tummen slutar röra sig.
Bindning till typer som implementerar ICustomTypeProvider
WPF stöder databindning till objekt som implementerar ICustomTypeProvider, även kallat anpassade typer. Du kan använda anpassade typer i följande fall.
Som en PropertyPath i en databindning. Till exempel kan egenskapen Path för en Binding referera till en egenskap av anpassad typ.
Som värdet för egenskapen DataType.
Som en typ som bestämmer de automatiskt genererade kolumnerna i en DataGrid.
Hämtar databindningsinformation från ett bindningsuttryck
I vissa fall kan du få BindingExpression av en Binding och behöver information om bindningens käll- och målobjekt. Nya API:er har lagts till så att du kan hämta käll- eller målobjektet eller den associerade egenskapen. När du har en BindingExpressionanvänder du följande API:er för att hämta information om målet och källan.
Så här hittar du det här värdet för bindningen | Använda det här API:et |
---|---|
Målobjektet | BindingExpressionBase.Target |
Målegenskapen | BindingExpressionBase.TargetProperty |
Källobjektet | BindingExpression.ResolvedSource |
Källegenskapen | BindingExpression.ResolvedSourcePropertyName |
Om BindingExpression tillhör en BindingGroup | BindingExpressionBase.BindingGroup |
Ägaren till en BindingGroup | Owner |
Söker efter ett giltigt DataContext-objekt
Det finns fall där DataContext för en objektcontainer i en ItemsControl blir bortkopplad. En objektcontainer är användargränssnittselementet som visar ett objekt i en ItemsControl. När en ItemsControl är data som är bundna till en samling genereras en objektcontainer för varje objekt. I vissa fall tas objektcontainrar bort från det visuella trädet. Två vanliga fall där en objektcontainer tas bort är när ett objekt tas bort från den underliggande samlingen och när virtualisering är aktiverad på ItemsControl. I dessa fall anges egenskapen DataContext för objektcontainern till sentinel-objektet som returneras av den BindingOperations.DisconnectedSource statiska egenskapen. Du bör kontrollera om DataContext är lika med DisconnectedSource-objektet innan du öppnar DataContext för en objektcontainer.
Flytta data när datavärdena ändras (direktformning)
En samling data kan grupperas, sorteras eller filtreras. WPF 4.5 gör att data kan ordnas om när data ändras. Anta till exempel att ett program använder en DataGrid för att lista aktier på en aktiemarknad och att lagren sorteras efter aktievärde. Om livesortering aktiveras på aktiernas CollectionViewflyttas en akties position i DataGrid när värdet på aktien blir större eller mindre än en annan akties värde. Mer information finns i ICollectionViewLiveShaping-gränssnittet.
Förbättrat stöd för att upprätta en svag referens till en händelse
Det är nu enklare att implementera det svaga händelsemönstret eftersom prenumeranter på händelser kan delta i det utan att implementera ett extra gränssnitt. Den generiska WeakEventManager-klassen gör det också möjligt för prenumeranter att delta i det svaga händelsemönstret om en dedikerad WeakEventManager inte finns för en viss händelse. Mer information finns i svaga händelsemönster.
Nya metoder för klassen Dispatcher
Klassen Dispatcher definierar nya metoder för synkrona och asynkrona åtgärder. Den synkrona metoden Invoke definierar överlagringar som tar en Action- eller Func<TResult>-parameter. Den nya asynkrona metoden, InvokeAsync, tar också en Action eller Func<TResult> som återanropsparameter och returnerar en DispatcherOperation eller DispatcherOperation<TResult>. Klasserna DispatcherOperation och DispatcherOperation<TResult> definierar en egenskap för Task. När du anropar InvokeAsynckan du använda nyckelordet await
med antingen DispatcherOperation eller den associerade Task. Om du behöver vänta synkront på Task som returneras av en DispatcherOperation eller DispatcherOperation<TResult>, kan du anropa DispatcherOperationWait-tilläggsmetoden. Att anropa Task.Wait resulterar i ett dödläge om åtgärden placeras i kö i en samtalstråd. Mer information om hur du använder en Task för att utföra asynkrona åtgärder finns i Aktivitetsparallellitet (Aktivitetsparallellt bibliotek).
Markeringstillägg för händelser
WPF 4.5 stöder markup-utvidgningar för händelser. WPF definierar inte ett tillägg för markering som ska användas för händelser, men tredje part kan skapa ett tillägg för markering som kan användas med händelser.
Se även
.NET Desktop feedback