WPF 버전 4.5의 새로운 기능

이 항목에는 WPF(Windows Presentation Foundation) 버전 4.5의 새롭고 향상된 기능에 대한 정보가 포함되어 있습니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

리본 컨트롤

WPF 4.5에는 빠른 실행 도구 모음, 애플리케이션 메뉴 및 탭을 호스트하는 Ribbon 컨트롤이 함께 제공됩니다. 자세한 내용은 리본 개요를 참조하세요.

그룹화된 큰 데이터 집합을 표시할 때의 성능 개선

화면에 표시되는 항목에 따라 많은 수의 데이터 항목에서 사용자 인터페이스(UI) 요소의 하위 집합이 생성될 때 UI 가상화가 발생합니다. VirtualizingPanel은 그룹화된 데이터의 UI 가상화를 사용하도록 설정하는 IsVirtualizingWhenGrouping 연결된 속성을 정의합니다. 데이터 그룹화에 대한 자세한 내용은 방법: XAML에서 뷰를 사용하여 데이터 정렬 및 그룹화를 참조하세요. 그룹화된 데이터 가상화에 대한 자세한 내용은 IsVirtualizingWhenGrouping 연결된 속성을 참조하세요.

VirtualizingPanel의 새로운 기능

  1. ScrollUnit 연결된 속성을 사용하여 VirtualizingStackPanel와 같은 VirtualizingPanel에 부분적 항목이 표시되는지 여부를 지정할 수 있습니다. ScrollUnitItem으로 설정된 경우 VirtualizingPanel은 완전히 표시할 수 있는 항목만 표시합니다. ScrollUnitPixel로 설정된 경우 VirtualizingPanel은 부분적으로 표시할 수 있는 항목을 표시할 수 있습니다.

  2. CacheLength 연결된 속성을 사용하여 VirtualizingPanel이 가상화될 때 뷰포트 앞과 뒤의 캐시 크기를 지정할 수 있습니다. 캐시는 항목이 가상화되지 않는 뷰포트 위 또는 아래 공간 양입니다. 캐시를 사용하면 뷰로 스크롤하는 동안 UI 요소가 생성되지 않도록 하여 성능을 향상시킬 수 있습니다. 캐시는 낮은 우선 순위에서 채워지므로 작업 중에는 애플리케이션이 응답하지 않게 됩니다. VirtualizingPanel.CacheLengthUnit 속성은 VirtualizingPanel.CacheLength에 사용되는 측정 단위를 결정합니다.

정적 속성에 바인딩

데이터 바인딩 원본으로 정적 속성을 사용할 수 있습니다. 데이터 바인딩 엔진은 정적 이벤트가 발생할 경우 속성 값이 변경되는 것을 인식합니다. 예를 들어 SomeClass 클래스가 MyProperty라는 정적 속성을 정의하는 경우 SomeClassMyProperty 값이 변경될 때 발생하는 정적 이벤트를 정의할 수 있습니다. 정적 이벤트는 다음 서명 중 하나를 사용할 수 있습니다.

  • public static event EventHandler MyPropertyChanged;

  • public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

첫 번째 경우 클래스는 이벤트 처리기에 EventArgs를 전달하는 PropertyNameChanged라는 정적 이벤트를 노출합니다. 두 번째 경우 클래스는 이벤트 처리기에 PropertyChangedEventArgs를 전달하는 StaticPropertyChanged라는 정적 이벤트를 노출합니다. 정적 속성을 구현하는 클래스에서 두 메서드 중 하나를 사용하여 속성-변경 알림이 발생하도록 선택할 수 있습니다.

UI가 아닌 스레드에서 컬렉션 액세스

WPF를 사용하면 컬렉션을 만들지 않은 스레드에서 데이터 컬렉션을 액세스하고 수정할 수 있습니다. 이를 통해 데이터베이스와 같은 외부 원본에서 데이터를 수신하는 데 백그라운드 스레드를 사용하고 UI 스레드에 데이터를 표시할 수 있습니다. 다른 스레드를 사용하여 콜렉션을 수정하면 사용자 인터페이스는 사용자 상호 작용에 응답성을 유지합니다.

동기적 및 비동기적으로 데이터 유효성 검사

INotifyDataErrorInfo 인터페이스를 통해 데이터 엔터티 클래스가 사용자 지정 유효성 검사 규칙을 구현하고 비동기적으로 유효성 검사 결과를 노출할 수 있습니다. 또한 이 인터페이스는 사용자 지정 오류 개체, 속성당 여러 오류, 속성 간 오류 및 엔터티 수준 오류도 지원합니다. 자세한 내용은 INotifyDataErrorInfo를 참조하세요.

데이터 바인딩 원본을 자동으로 업데이트

데이터 원본을 업데이트하는 데 데이터 바인딩을 사용하는 경우 Delay 속성을 사용하여 원본이 업데이트되기 전에 대상에서 속성이 변경된 후 전달할 시간을 지정할 수 있습니다. 예를 들어 Value 속성 데이터가 데이터 개체의 속성에 양방향 바인딩되고 UpdateSourceTrigger 속성이 PropertyChanged로 설정된 Slider가 있다고 가정해 보세요. 이 예제에서 사용자가 Slider를 움직이면 원본은 Slider가 움직이는 픽셀마다 업데이트됩니다. 원본 개체는 일반적으로 슬라이더의 Value가 바뀌지 않을 때만 슬라이더의 값이 필요합니다. 원본이 너무 자주 업데이트되지 않도록 하려면 Delay를 사용하여 위치 조정 컨트롤이 이동을 중지한 후 특정 시간이 경과할 때까지 해당 원본이 업데이트되지 않도록 지정합니다.

ICustomTypeProvider를 구현하는 형식에 바인딩

WPF는 사용자 지정 형식으로도 알려진 ICustomTypeProvider를 구현하는 개체로 데이터 바인딩을 지원합니다. 다음과 같은 경우 사용자 지정 형식을 사용할 수 있습니다.

  1. 데이터 바인딩에서 PropertyPath로 사용합니다. 예를 들어 BindingPath 속성은 사용자 지정 형식의 속성을 참조할 수 있습니다.

  2. DataType 속성의 값으로 사용합니다.

  3. DataGrid에서 자동으로 생성된 열을 결정하는 형식으로 사용합니다.

바인딩 식에서 데이터 바인딩 정보 검색

특정 경우 BindingBindingExpression을 얻고 바인딩의 원본 및 대상 개체에 대한 정보가 필요할 수 있습니다. 원본 또는 대상 개체나 연결된 속성을 얻도록 새로운 API가 추가되었습니다. BindingExpression이 있는 경우 다음 API를 사용하여 원본 및 대상에 대한 정보를 얻습니다.

바인딩의 다음 값을 찾으려면 다음 API 사용
대상 개체 BindingExpressionBase.Target
대상 속성 BindingExpressionBase.TargetProperty
소스 개체 BindingExpression.ResolvedSource
원본 속성 BindingExpression.ResolvedSourcePropertyName
BindingExpressionBindingGroup에 속하는지 여부 BindingExpressionBase.BindingGroup
BindingGroup의 소유자 Owner

유효한 DataContext 개체 확인

ItemsControl에서 항목 컨테이너의 DataContext 연결이 끊어지는 경우가 있습니다. 항목 컨테이너는 ItemsControl에서 항목을 표시하는 UI 요소입니다. ItemsControl이 컬렉션에 데이터 바인딩된 경우 각 항목에 대해 항목 컨테이너가 생성됩니다. 경우에 따라 항목 컨테이너는 시각적 트리에서 제거됩니다. 항목 컨테이너가 제거되는 일반적인 두 가지 경우는 기본 컬렉션에서 항목이 제거되는 경우와 ItemsControl에서 가상화가 사용하도록 설정된 경우입니다. 이러한 경우 항목 컨테이너의 DataContext 속성은 BindingOperations.DisconnectedSource 정적 속성이 반환하는 Sentinel 개체로 설정됩니다. 항목 컨테이너의 DataContext에 액세스하기 전에 DataContextDisconnectedSource 개체와 동일한지 확인해야 합니다.

데이터 값이 변경될 때 데이터의 위치 변경(라이브 셰이핑)

데이터의 컬렉션을 그룹화, 정렬 또는 필터링할 수 있습니다. WPF 4.5에서는 데이터가 수정되면 데이터를 다시 배열할 수 있습니다. 예를 들어, 애플리케이션에서 사용 하는 DataGrid 따라 주식 시장에 주식, 주식을 나열 하려면 정렬 합니다. 주식에서 실시간 정렬을 사용 하도록 설정 하는 경우 CollectionView에서 주식의 위치는 DataGrid 재고 값이 큰 이동 또는 보다 작은 다른 주식의 값입니다. 자세한 내용은 ICollectionViewLiveShaping 인터페이스를 참조하세요.

이벤트에 대한 약한 참조 설정을 위한 지원 개선

이벤트 구독자가 추가 인터페이스 구현 없이 참여할 수 있으므로 약한 이벤트 패턴을 구현하기가 더 쉬워졌습니다. 특정 이벤트의 전용 WeakEventManager가 존재하지 않는 경우 구독자는 제네릭 WeakEventManager 클래스를 통해서도 약한 이벤트 패턴에 참여할 수 있습니다. 자세한 내용은 약한 이벤트 패턴을 참조하세요.

Dispatcher 클래스에 대한 새로운 메서드

Dispatcher 클래스는 동기 및 비동기 작업에 대해 새로운 메서드를 정의합니다. 동기 Invoke 메서드는 Action 또는 Func<TResult> 매개 변수를 사용하는 오버로드를 정의합니다. 새 비동기 메서드인 InvokeAsyncAction 또는 Func<TResult>을 콜백 매개 변수로 사용하고 DispatcherOperation 또는 DispatcherOperation<TResult>을 반환합니다. DispatcherOperationDispatcherOperation<TResult> 클래스는 Task 속성을 정의합니다. InvokeAsync를 호출할 때 DispatcherOperation 또는 연결된 Task와 함께 await 키워드를 사용할 수 있습니다. DispatcherOperation 또는 DispatcherOperation<TResult>이 반환하는 Task를 동기식으로 기다려야 하는 경우 DispatcherOperationWait 확장 메서드를 호출하세요. 작업이 호출 스레드에 대기 중인 경우 Task.Wait호출은 교착 상태를 초래합니다. Task를 사용한 비동기 작업 수행에 대한 자세한 내용은 작업 병렬 처리(작업 병렬 라이브러리)를 참조하세요.

이벤트에 대한 태그 확장

WPF 4.5에서는 이벤트에 대한 태그 확장을 지원합니다. WPF는 이벤트에 사용될 태그 확장을 정의하지 않지만 타사에서 이벤트에 사용할 수 있는 태그 확장을 만들 수 있습니다.

참고 항목