WPF 버전 4.5의 새로운 기능What's New in WPF Version 4.5

이 항목에서는의 새로운 기능과 향상 된 기능에 대 한 정보가 WPF(Windows Presentation Foundation)Windows Presentation Foundation (WPF) 4.5 버전입니다.This topic contains information about new and enhanced features in WPF(Windows Presentation Foundation)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 정의 IsVirtualizingWhenGrouping 그룹화 된 데이터에 대 한 UI 가상화를 사용할 수 있는 속성을 연결 합니다.The VirtualizingPanel defines the IsVirtualizingWhenGrouping attached property that enables UI Virtualization for grouped data. 데이터 그룹화에 대 한 자세한 내용은 참조 하는 방법. 데이터 정렬 및 그룹화 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. 하는 경우 ScrollUnit 로 설정 된 ItemVirtualizingPanel 완전히 표시 되는 항목만 표시 됩니다.If ScrollUnit is set to Item, the VirtualizingPanel will only display items that are completely visible. 하는 경우 ScrollUnit 로 설정 된 PixelVirtualizingPanel 부분적으로 표시 된 항목을 표시할 수 있습니다.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 요소가 생성되지 않도록 하여 성능을 향상시킬 수 있습니다.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. 두 번째 경우 클래스 라는 정적 이벤트를 노출 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. 예를 들어 합니다 Path 의 속성을 Binding 사용자 지정 형식의 속성을 참조할 수 있습니다.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 다음 API 사용Use this API
대상 개체The target object BindingExpressionBase.Target
대상 속성The target property BindingExpressionBase.TargetProperty
소스 개체The source object BindingExpression.ResolvedSource
원본 속성The source property BindingExpression.ResolvedSourcePropertyName
여부는 BindingExpression 속한를 BindingGroupWhether the BindingExpression belongs to a BindingGroup BindingExpressionBase.BindingGroup
소유자는 BindingGroupThe 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. 항목 컨테이너에 있는 항목을 표시 하는 UI 요소는는 ItemsControl합니다.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. 항목 컨테이너는 제거 되는 두 가지 일반적인 경우는 기본 컬렉션에서 항목이 제거 될 때 및에 가상화가 사용 하는 경우는 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 항목 컨테이너의 속성에서 반환 된 sentinel 개체로 설정 됩니다는 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 값과 같음는 DisconnectedSource 개체에 액세스 하기 전에 DataContext 항목 컨테이너의 합니다.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.

Dispatcher 클래스에 대한 새로운 메서드New methods for the Dispatcher class

Dispatcher 클래스는 동기 및 비동기 작업에 대해 새로운 메서드를 정의합니다.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, 또한를 Action 또는 Func<TResult> 콜백 매개 변수 및 반환을 DispatcherOperation 또는 DispatcherOperation<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 키워드 중 하나를 사용 하 여 합니다 DispatcherOperation 또는 연결 된 Task합니다.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