Dela via


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:

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

  1. 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.

  2. 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 MyPropertykan 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.

  1. Som en PropertyPath i en databindning. Till exempel kan egenskapen Path för en Binding referera till en egenskap av anpassad typ.

  2. Som värdet för egenskapen DataType.

  3. 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