WPF Version 4.5 の新機能What's New in WPF Version 4.5

このトピックには、新機能および強化機能に関する情報が含まれています。Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)バージョン 4.5。This topic contains information about new and enhanced features in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) version 4.5.

このトピックは、次のセクションで構成されています。This topic contains the following sections:

リボン コントロールRibbon control

WPF 4.5 には、クイック アクセス ツール バー、アプリケーション メニュー、タブをホストする Ribbon コントロールが付属しています。WPF 4.5 ships with a Ribbon control that hosts a Quick Access Toolbar, Application Menu, and tabs. 詳細については、「リボンの概要」を参照してください。For more information, see the Ribbon Overview.

グループ化された大きなデータ セットを表示する際のパフォーマンスが向上Improved performance when displaying large sets of grouped data

UI の仮想化は、ユーザー インターフェイス (UI) 要素のサブセットが画面上に表示する項目に基づいて、より多くのデータ項目から生成されるときに行われます。UI virtualization occurs when a subset of user interface (UI) elements are generated from a larger number of data items based on which items are visible on the screen. VirtualizingPanel は、グループ化されたデータの UI の仮想化を有効にする IsVirtualizingWhenGrouping 添付プロパティを定義します。The VirtualizingPanel defines the IsVirtualizingWhenGrouping attached property that enables UI Virtualization for grouped data. データのグループ化の詳細については、「How to: Sort and Group Data Using a View in XAML」(方法: XAML のビューを使用したデータの並べ替えとグループ化) を参照してください。For more information about grouping data, see How to: Sort and Group Data Using a View in XAML. グループ化されたデータの仮想化の詳細については、IsVirtualizingWhenGrouping 添付プロパティを参照してください。For more information about virtualizing grouped data, see the IsVirtualizingWhenGrouping attached property.

VirtualizingPanel の新機能New features for the VirtualizingPanel

  1. VirtualizingPanel 添付プロパティを指定することで、VirtualizingStackPanel (ScrollUnit など) に部分的な項目を表示するかどうかを指定できます。You can specify whether a VirtualizingPanel, such as the VirtualizingStackPanel, displays partial items by using the ScrollUnit attached property. ScrollUnitItem に設定されている場合、VirtualizingPanel には完全に表示される項目だけが表示されます。If ScrollUnit is set to Item, the VirtualizingPanel will only display items that are completely visible. ScrollUnitPixel に設定されている場合、VirtualizingPanel には部分的に表示される項目も表示されます。If ScrollUnit is set to Pixel, the VirtualizingPanel can display partially visible items.

  2. VirtualizingPanel 添付プロパティを使用して CacheLength を仮想化すると、ビューポートの前後でキャッシュのサイズを指定できます。You can specify the size of the cache before and after the viewport when the VirtualizingPanel is virtualizing by using the CacheLength attached property. キャッシュは、項目が仮想化されないビューポートの上または下の領域の量です。The cache is the amount of space above or below the viewport in which items are not virtualized. キャッシュを使用して、UI 要素がビューにスクロールされたときに UI 要素が生成されないようすると、パフォーマンスが向上します。Using a cache to avoid generating UI elements as they’re scrolled into view can improve performance. キャッシュは、操作中にアプリケーションが応答を停止しないように低い優先度で実行されます。The cache is populated at a lower priority so that the application does not become unresponsive during the operation. VirtualizingPanel.CacheLengthUnit プロパティは、VirtualizingPanel.CacheLength により使用される測定単位を決定します。The VirtualizingPanel.CacheLengthUnit property determines the unit of measurement that is used by VirtualizingPanel.CacheLength.

静的プロパティへのバインドBinding to static properties

データ バインディングのソースとして静的プロパティを使用できます。You can use static properties as the source of a data binding. データ バインディング エンジンは、静的イベントが発生した場合にプロパティの値が変更されたことを認識します。The data binding engine recognizes when the property's value changes if a static event is raised. たとえば、SomeClass クラスが MyProperty という静的プロパティを定義している場合、SomeClassMyProperty の値が変更されたときに発生する静的イベントを定義できます。For example, if the class SomeClass defines a static property called MyProperty, SomeClass can define a static event that is raised when the value of MyProperty changes. 静的イベントは、次のいずれかのシグネチャを使用できます。The static event can use either of the following signatures.

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

最初のケースのクラスが公開という名前の静的イベント注PropertyName Changedで渡されたEventArgsイベント ハンドラーにします。Note that in the first case, the class exposes a static event named PropertyNameChanged that passes EventArgs to the event handler. 2 番目のケースでは、イベント ハンドラーに StaticPropertyChanged を渡す PropertyChangedEventArgs という名前の静的イベントがクラスにより公開されています。In the second case, the class exposes a static event named StaticPropertyChanged that passes PropertyChangedEventArgs to the event handler. 静的プロパティを実装するクラスは、いずれかの方法を使用してプロパティ変更通知を生成することを選択できます。A class that implements the static property can choose to raise property-change notifications using either method.

非 UI スレッドでのコレクションへのアクセスAccessing collections on non-UI Threads

WPF により、コレクションで作成されたスレッド以外のスレッドでデータ コレクションにアクセスして変更することが可能になります。WPF enables you to access and modify data collections on threads other than the one that created the collection. このため、バックグラウンド スレッドを使用して、データベースなどの外部ソースからデータを受信し、UI スレッドにデータを表示することができます。This enables you to use a background thread to receive data from an external source, such as a database, and display the data on the UI thread. 別のスレッドを使用してコレクションを変更することで、ユーザー インターフェイスはユーザー操作への応答を維持します。By using another thread to modify the collection, your user interface remains responsive to user interaction.

データの同期および非同期検証Synchronously and Asynchronously validating data

INotifyDataErrorInfo インターフェイスにより、データ エンティティ クラスは、ユーザー定義の検証規則を実装し、検証結果を非同期的に公開することができます。The INotifyDataErrorInfo interface enables data entity classes to implement custom validation rules and expose validation results asynchronously. このインターフェイスは、カスタム エラー オブジェクト、プロパティごとの複数のエラー、プロパティ間のエラー、およびエンティティ レベルのエラーもサポートします。This interface also supports custom error objects, multiple errors per property, cross-property errors, and entity-level errors. 詳細については、「INotifyDataErrorInfo」を参照してください。For more information, see INotifyDataErrorInfo.

データ バインディングのソースの自動更新Automatically updating the source of a data binding

データ バインディングを使用してデータ ソースを更新する場合、Delay プロパティを使用して、ターゲットでプロパティが変更されてからソースが更新されるまでの時間の長さを指定できます。If you use a data binding to update a data source, you can use the Delay property to specify an amount of time to pass after the property changes on the target before the source updates. たとえば、Slider プロパティ データがデータ オブジェクトのプロパティに双方向にバインドされた Value があり、UpdateSourceTrigger プロパティが PropertyChanged に設定されているとします。For example, suppose that you have a Slider that has its Value property data two-way bound to a property of a data object and the UpdateSourceTrigger property is set to PropertyChanged. この例では、ユーザーが Slider を移動すると、Slider が移動する各ピクセルのソースが更新されます。In this example, when the user moves the Slider, the source updates for each pixel that the Slider moves. Value が変更を停止した場合、ソース オブジェクトには通常スライダーの値のみ必要です。The source object typically needs the value of the slider only when the slider's Value stops changing. ソースがあまり頻繁に更新されないようにするには、Delay を使用して、Thumb が移動を停止してから一定の時間が経過するまでソースが更新されないように指定します。To prevent updating the source too often, use Delay to specify that the source should not be updated until a certain amount of time elapses after the thumb stops moving.

ICustomTypeProvider を実装する型へのバインドBinding to types that Implement ICustomTypeProvider

WPF では、ICustomTypeProvider を実装するオブジェクトへのデータ バインディングがサポートされます (カスタムの型とも呼ばれます)。WPF supports data binding to objects that implement ICustomTypeProvider, also known as custom types. カスタムの型は、次の場合に使用できます。You can use custom types in the following cases.

  1. データ バインディングにおける PropertyPath として。As a PropertyPath in a data binding. たとえば、PathBinding プロパティは、カスタムの型のプロパティを参照できます。For example, the Path property of a Binding can reference a property of a custom type.

  2. DataType プロパティの値として。As the value of the DataType property.

  3. DataGrid で自動的に生成された列を決定する型として。As a type that determines the automatically generated columns in a DataGrid.

バインディング式からのデータ バインディング情報の取得Retrieving data binding information from a binding expression

場合によっては、BindingExpressionBinding を取得することがあり、バインディングのソースとターゲットのオブジェクトに関する情報を必要となる可能性があります。In certain cases, you might get the BindingExpression of a Binding and need information about the source and target objects of the binding. ソースまたはターゲットのオブジェクトや関連プロパティを取得できるように、新しい API が追加されました。New APIs have been added to enable you to get the source or target object or the associated property. BindingExpression がある場合、次の API を使用してターゲットおよびソースに関する情報を取得します。When you have a BindingExpression, use the following APIs to get information about the target and source.

検出するバインディングの値To find this value of the binding 使用する APIUse this API
ターゲット オブジェクトThe target object BindingExpressionBase.Target
ターゲット プロパティThe target property BindingExpressionBase.TargetProperty
ソース オブジェクトThe source object BindingExpression.ResolvedSource
ソース プロパティThe source property BindingExpression.ResolvedSourcePropertyName
BindingExpressionBindingGroup に属するかどうかWhether the BindingExpression belongs to a BindingGroup BindingExpressionBase.BindingGroup
BindingGroup の所有者The owner of a BindingGroup Owner

有効な DataContext オブジェクトの確認Checking for a valid DataContext object

DataContext にある項目のコンテナーの ItemsControl が切断されるケースがあります。There are cases where the DataContext of an item container in an ItemsControl becomes disconnected. 項目コンテナーは、ItemsControl に項目を表示する UI 要素です。An item container is the UI element that displays an item in an ItemsControl. ItemsControl がコレクションにバインドされたデータの場合、項目コンテナーは項目ごとに生成されます。When an ItemsControl is data bound to a collection, an item container is generated for each item. 場合によっては、項目コンテナーがビジュアル ツリーから削除されます。In some cases, item containers are removed from the visual tree. 項目コンテナーが削除される 2 つの一般的なケースは、項目が基になるコレクションから削除されたときと、仮想化が ItemsControl で有効になっているときです。Two typical cases where an item container is removed are when an item is removed from the underlying collection and when virtualization is enabled on the ItemsControl. このような場合、項目コンテナーの DataContext プロパティは、BindingOperations.DisconnectedSource の静的プロパティから返されるオブジェクトのセンティネル オブジェクトに設定されます。In these cases, the DataContext property of the item container will be set to the sentinel object that is returned by the BindingOperations.DisconnectedSource static property. 項目コンテナーの DataContext にアクセスする前に、DisconnectedSourceDataContext オブジェクトと等しいかどうかを確認する必要があります。You should check whether the DataContext is equal to the DisconnectedSource object before accessing the DataContext of an item container.

データの値変更に伴うデータの再配置 (ライブ形成)Repositioning data as the data's values change (Live shaping)

データのコレクションは、グループ化、並べ替え、またはフィルター処理が可能です。A collection of data can be grouped, sorted, or filtered. WPF 4.5 により、データが変更されたときの再配置が可能になります。WPF 4.5 enables the data to be rearranged when the data is modified. たとえば、アプリケーションが DataGrid を使用して株式市場の株式を一覧表示し、株式が株価によって並べ替えられるとします。For example, suppose that an application uses a DataGrid to list stocks in a stock market and the stocks are sorted by stock value. 株式の CollectionView でライブ並べ替えが有効な場合、株式が別の株式の価格を上回るか下回ると、DataGrid における株式の位置が移動します。If live sorting is enabled on the stocks' CollectionView, a stock's position in the DataGrid moves when the value of the stock becomes greater or less than another stock's value. 詳細については、ICollectionViewLiveShaping インターフェイスのトピックを参照してください。For more information, see the ICollectionViewLiveShaping interface.

イベントへの弱い参照確立のサポート強化Improved Support for Establishing a Weak Reference to an Event

追加のインターフェイスを実装しなくてもイベントへのサブスクライバーがイベントに参加できるため、弱いパターンの実装が簡単になりました。Implementing the weak event pattern is now easier because subscribers to events can participate in it without implementing an extra interface. 一般的な WeakEventManager クラスでは、専用の WeakEventManager が特定のイベントに存在しない場合は、サブスクライバーが弱いイベント パターンにも参加できるようになりました。The generic WeakEventManager class also enables subscribers to participate in the weak event pattern if a dedicated WeakEventManager does not exist for a certain event. 詳細については、「弱いイベント パターン」を参照してください。For more information, see Weak Event Patterns.

ディスパッチャー クラスの新しいメソッドNew methods for the Dispatcher class

ディスパッチャー クラスは、同期操作および非同期操作の新しいメソッドを定義します。The Dispatcher class defines new methods for synchronous and asynchronous operations. 同期メソッドである Invoke は、Action パラメーターまたは Func<TResult> パラメーターを受け取るオーバーロードを定義します。The synchronous Invoke method defines overloads that take an Action or Func<TResult> parameter. 新しい非同期メソッドである InvokeAsyncは、コールバック パラメーターとして ActionFunc<TResult> を受け取り、DispatcherOperationDispatcherOperation<TResult> を返します。The new asynchronous method, InvokeAsync, also takes an Action or Func<TResult> as the callback parameter and returns a DispatcherOperation or DispatcherOperation<TResult>. DispatcherOperation クラスと DispatcherOperation<TResult> クラスは、Task プロパティを定義します。The DispatcherOperation and DispatcherOperation<TResult> classes define a Task property. InvokeAsync を呼び出すと、await または関連付けられた DispatcherOperationTask を持つキーワードを使用できます。When you call InvokeAsync, you can use the await keyword with either the DispatcherOperation or the associated Task. Task または DispatcherOperation によって返される DispatcherOperation<TResult> を同期的に待機する必要がある場合、DispatcherOperationWait 拡張メソッドを呼び出します。If you need to wait synchronously for the Task that is returned by a DispatcherOperation or DispatcherOperation<TResult>, call the DispatcherOperationWait extension method. Task.Wait を呼び出すと、呼び出し元スレッドで操作がキューに置かれた場合はデッドロックが発生します。Calling Task.Wait will result in a deadlock if the operation is queued on a calling thread. 使用しての詳細については、Taskを非同期操作を実行するには、次を参照してください。タスクの並列化 (タスク並列ライブラリ)です。For more information about using a Task to perform asynchronous operations, see Task Parallelism (Task Parallel Library).

イベントのマークアップ拡張機能Markup Extensions for Events

WPF 4.5 では、イベントのマークアップ拡張機能がサポートされます。WPF 4.5 supports markup extensions for events. WPF はイベントに使用されるマークアップ拡張機能を定義しませんが、サードパーティがイベントで使用できるマークアップ拡張機能を作成できます。While WPF does not define a markup extension to be used for events, third parties are able to create a markup extension that can be used with events.

関連項目See Also

.NET Framework の新機能What's New in the .NET Framework