Sdílet prostřednictvím


Co je nového ve WPF verze 4.5

Toto téma obsahuje informace o nových a vylepšených funkcích systému Windows Presentation Foundation (WPF) verze 4.5.

Toto téma obsahuje následující části:

Ovládací prvek pásu karet

WPF 4.5 je dodáván s ovládacím prvkem Ribbon, který obsahuje panel nástrojů Rychlý přístup, nabídku aplikace a karty. Další informace najdete v přehledu pásu karet.

Lepší výkon při zobrazení velkých sad seskupených dat

K virtualizaci uživatelského rozhraní dochází v případě, že se z většího počtu datových položek generuje podmnožina prvků uživatelského rozhraní (UI) na základě toho, které položky jsou na obrazovce viditelné. VirtualizingPanel definuje IsVirtualizingWhenGrouping připojenou vlastnost, která umožňuje virtualizaci uživatelského rozhraní pro seskupovaná data. Další informace o seskupování dat naleznete v tématu Postupy: Řazení a seskupení dat pomocí zobrazení v XAML. Další informace o virtualizaci seskupených dat najdete v připojené vlastnosti IsVirtualizingWhenGrouping.

Nové funkce pro VirtualizingPanel

  1. Můžete určit, zda VirtualizingPanel, například VirtualizingStackPanel, zobrazí částečné položky pomocí vlastnosti připojené ScrollUnit. Pokud je ScrollUnit nastavena na Item, VirtualizingPanel zobrazí jenom položky, které jsou zcela viditelné. Pokud je ScrollUnit nastavená na Pixel, může VirtualizingPanel zobrazit částečně viditelné položky.

  2. Velikost mezipaměti můžete určit před a po oblasti zobrazení, když VirtualizingPanel virtualizuje pomocí připojené vlastnosti CacheLength. Mezipaměť je množství místa nad nebo pod zobrazením, ve kterém nejsou položky virtualizovány. Použití mezipaměti, aby se zabránilo generování prvků uživatelského rozhraní při posouvání do zobrazení, může zvýšit výkon. Mezipaměť se naplní s nižší prioritou, aby aplikace během operace nereagovala. Vlastnost VirtualizingPanel.CacheLengthUnit určuje měrnou jednotku, kterou používá VirtualizingPanel.CacheLength.

Vazba na statické vlastnosti

Statické vlastnosti můžete použít jako zdroj datové vazby. Modul datových vazeb rozpozná, kdy se hodnota vlastnosti změní, pokud je vyvolána statická událost. Pokud například třída SomeClass definuje statickou vlastnost s názvem MyProperty, SomeClass může definovat statickou událost, která je vyvolána při změně hodnoty MyProperty. Statická událost může používat některý z následujících podpisů.

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

Všimněte si, že v prvním případě třída zveřejňuje statickou událost s názvem PropertyNameChanged, která předává EventArgs obslužné rutině události. V druhém případě třída zveřejňuje statickou událost s názvem StaticPropertyChanged, která předává PropertyChangedEventArgs zpracovateli události. Třída, která implementuje statickou vlastnost, se může rozhodnout vyvolat oznámení o změně vlastností pomocí některé z metod.

Přístup ke kolekcím na vláknech bez uživatelského rozhraní

WPF umožňuje přístup k kolekci dat a jejich úpravám na jiných vláknech, než je ta, která kolekci vytvořila. To umožňuje použít vlákno na pozadí k příjmu dat z externího zdroje, jako je databáze, a zobrazení dat ve vlákně uživatelského rozhraní. Pomocí jiného vlákna k úpravě kolekce zůstane uživatelské rozhraní responzivní na interakci uživatele.

Synchronní a asynchronní ověřování dat

Rozhraní INotifyDataErrorInfo umožňuje datovým entitám implementovat vlastní ověřovací pravidla a vystavit výsledky ověření asynchronně. Toto rozhraní také podporuje vlastní objekty chyb, více chyb na vlastnost, chyby mezi vlastnostmi a chyby na entitní úrovni. Další informace najdete v tématu INotifyDataErrorInfo.

Automatická aktualizace zdroje datové vazby

Pokud k aktualizaci zdroje dat použijete datovou vazbu, můžete pomocí vlastnosti Delay určit, jak dlouho má uplynout po změně vlastnosti na cíli, než se aktualizuje zdroj. Předpokládejme například, že máte Slider, který má obousměrné svázání dat vlastnosti Value s vlastností datového objektu a je vlastnost UpdateSourceTrigger nastavena na PropertyChanged. Když v tomto příkladu uživatel přesune Slider, zdroj se aktualizuje pro každý pixel, který Slider přesune. Zdrojový objekt obvykle potřebuje hodnotu posuvníku pouze v případech, kdy se Value posuvníku přestane měnit. Chcete-li zabránit příliš časté aktualizaci zdroje, použijte Delay k určení, že zdroj by se neměl aktualizovat, dokud neuplyne určitý čas po zastavení pohybu palce.

Vazba na typy, které implementují ICustomTypeProvider

WPF podporuje datové vazby na objekty, které implementují ICustomTypeProvider, označované také jako vlastní typy. Vlastní typy můžete použít v následujících případech.

  1. Jako PropertyPath v datové vazbě. Například vlastnost Path objektu Binding může odkazovat na vlastnost vlastní definovaného typu.

  2. Jako hodnota vlastnosti DataType.

  3. Jako typ, který určuje automaticky generované sloupce v DataGrid.

Načítání informací o datové vazbě z výrazu vazby

V některých případech můžete získat BindingExpression z Binding a potřebujete informace o zdrojových a cílových objektech vazby. Přidali jsme nová rozhraní API, která vám umožní získat zdrojový nebo cílový objekt nebo přidruženou vlastnost. Pokud máte BindingExpression, získejte informace o cíli a zdroji pomocí následujících rozhraní API.

Najít hodnotu této vazby Použijte toto rozhraní API
Cílový objekt BindingExpressionBase.Target
Cílová vlastnost BindingExpressionBase.TargetProperty
Zdrojový objekt BindingExpression.ResolvedSource
Zdrojová vlastnost BindingExpression.ResolvedSourcePropertyName
Zda BindingExpression patří do BindingGroup BindingExpressionBase.BindingGroup
Vlastník BindingGroup Owner

Kontrola platného objektu DataContext

Existují případy, kdy se DataContext kontejneru položek v ItemsControl odpojí. Kontejner pro položky je prvek uživatelského rozhraní, který zobrazuje položku v ItemsControl. Pokud je ItemsControl data svázaná s kolekcí, vygeneruje se pro každou položku kontejner položek. V některých případech se kontejnery položek odstraní z vizuálního stromu. Dva typické případy, kdy je kontejner položek odebrán, jsou, když je položka odebrána z podkladové kolekce a kdy je v ItemsControlpovolena virtualizace . V těchto případech bude vlastnost DataContext kontejneru položky nastavena na sentinelový objekt, který je vrácen statickou vlastností BindingOperations.DisconnectedSource. Před přístupem ke DataContext kontejneru položek byste měli zkontrolovat, jestli se DataContext rovná DisconnectedSource objektu.

Změna umístění dat při změně hodnot dat (živé tvarování)

Kolekci dat je možné seskupit, řadit nebo filtrovat. WPF 4.5 umožňuje změnit uspořádání dat při úpravě dat. Předpokládejme například, že aplikace používá DataGrid k výpisu akcií na burze a akcie jsou seřazené podle hodnoty akcií. Pokud je na akciích CollectionViewpovoleno živé řazení, pozice akcie v DataGrid se změní, když se její hodnota stane větší nebo menší než hodnota jiné akcie. Další informace najdete v rozhraní ICollectionViewLiveShaping.

Vylepšená podpora pro vytvoření slabého odkazu na událost

Implementace slabého vzoru událostí je teď jednodušší, protože předplatitelé událostí se můžou účastnit bez implementace dalšího rozhraní. Obecná třída WeakEventManager také umožňuje odběratelům účastnit se slabého vzoru událostí, pokud pro určitou událost neexistuje vyhrazený WeakEventManager. Další informace naleznete v tématu Slabé vzory událostí.

Nové metody pro třídu Dispatcher

Třída Dispatcher definuje nové metody pro synchronní a asynchronní operace. Synchronní metoda Invoke definuje přetížení, která přebírají parametr Action nebo Func<TResult>. Nová asynchronní metoda, InvokeAsync, také přebírá Action nebo Func<TResult> jako parametr zpětného volání a vrací DispatcherOperation nebo DispatcherOperation<TResult>. Třídy DispatcherOperation a DispatcherOperation<TResult> definují vlastnost Task. Při volání InvokeAsyncmůžete použít klíčové slovo await buď s DispatcherOperation, nebo s přidruženým Task. Pokud potřebujete synchronně počkat na Task, která se vrací z DispatcherOperation nebo DispatcherOperation<TResult>, zavolejte metodu rozšíření DispatcherOperationWait. Volání Task.Wait způsobí zablokování, pokud je operace zařazena do fronty ve volajícím vlákně. Další informace o použití Task k provádění asynchronních operací naleznete v tématu Task Parallelism (Task Parallel Library).

Rozšíření značek pro události

WPF 4.5 podporuje značkovací rozšíření pro události. WpF sice nedefinuje rozšíření značek, které se má použít pro události, ale třetí strany mohou vytvořit rozšíření značek, které lze použít s událostmi.

Viz také