속성 경로 구문

PropertyPath 클래스 및 문자열 구문을 사용하여 XAML 또는 코드에서 PropertyPath 값을 인스턴스화할 수 있습니다. PropertyPath 값은 데이터 바인딩에서 사용됩니다. 유사한 구문은 스토리보드 애니메이션을 대상으로 하는 데 사용됩니다. 두 시나리오의 경우 속성 경로는 단일 속성으로 최종적으로 확인되는 하나 이상의 개체 속성 관계의 순회를 설명합니다.

속성 경로 문자열을 XAML의 특성으로 직접 설정할 수 있습니다. 동일한 문자열 구문을 사용하여 코드에서 바인딩설정하는 PropertyPath 생성하거나 SetTargetProperty를 사용하여 코드에서 애니메이션 대상을 설정할 수 있습니다. Windows 런타임 속성 경로를 사용하는 두 가지 고유한 기능 영역인 데이터 바인딩 및 애니메이션 대상 지정이 있습니다. 애니메이션 대상 지정은 Windows 런타임 구현에서 기본 속성 경로 구문 값을 만들지 않고 정보를 문자열로 유지하지만 개체 속성 순회의 개념은 매우 유사합니다. 각각을 대상으로 하는 데이터 바인딩 및 애니메이션은 속성 경로를 약간 다르게 평가하므로 각각에 대한 속성 경로 구문을 개별적으로 설명합니다.

데이터 바인딩의 개체에 대한 속성 경로

Windows 런타임 종속성 속성의 대상 값에 바인딩 할 수 있습니다. 데이터 바인딩의 원본 속성 값은 종속성 속성일 필요가 없습니다. 비즈니스 개체의 속성일 수 있습니다(예: Microsoft .NET 언어 또는 C++로 작성된 클래스). 또는 바인딩 값의 원본 개체는 앱에서 이미 정의한 기존 종속성 개체일 수 있습니다. 원본은 단순 속성 이름 또는 비즈니스 개체의 개체 그래프에서 개체-속성 관계의 순회로 참조할 수 있습니다.

개별 속성 값에 바인딩하거나 목록 또는 컬렉션을 포함하는 대상 속성에 바인딩 할 수 있습니다. 원본이 컬렉션이거나 경로가 컬렉션 속성을 지정하는 경우 데이터 바인딩 엔진은 원본의 컬렉션 항목을 바인딩 대상과 일치하므로 해당 컬렉션의 특정 항목을 예측할 필요 없이 ListBox 를 데이터 원본 컬렉션의 항목 목록으로 채우는 등의 동작이 발생합니다.

개체 그래프 트래버스

개체 그래프에서 개체-속성 관계의 순회를 나타내는 구문의 요소는 점(.) 문자입니다. 속성 경로 문자열의 각 점은 개체(점의 왼쪽)와 해당 개체의 속성(점 오른쪽) 간의 나누기를 나타냅니다. 문자열은 왼쪽에서 오른쪽으로 평가되므로 여러 개체 속성 관계를 단계별로 수행할 수 있습니다. 예를 살펴보겠습니다.

"{Binding Path=Customer.Address.StreetAddress1}"

이 경로를 평가하는 방법은 다음과 같습니다.

  1. 데이터 컨텍스트 개체(또는 동일한 바인딩으로 지정된 원본)가 "Customer"라는 속성을 검색합니다.
  2. "Customer" 속성의 값인 개체는 "Address"라는 속성을 검색합니다.
  3. "StreetAddress1"라는 속성을 검색하기 위해서는 "Address" 속성의 값인 개체를 검색하십시오.

이러한 각 단계에서 값은 개체로 처리됩니다. 결과 형식은 바인딩이 특정 속성에 적용되는 경우에만 검사됩니다. "Address"가 문자열의 어떤 부분이 주소인지 노출하지 않은 문자열 값일 경우 이 예제는 실패합니다. 일반적으로 바인딩은 알려진 고의적인 정보 구조를 가진 비즈니스 개체의 특정 중첩된 속성 값을 가리킵니다.

데이터 바인딩 속성 경로의 속성에 대한 규칙

  • 속성 경로에서 참조하는 모든 속성은 원본 비즈니스 개체에서 공용이어야 합니다.
  • 끝 속성(경로에서 마지막으로 명명된 속성인 속성)은 public이어야 하며 변경 가능해야 합니다. 정적 값에 바인딩할 수 없습니다.
  • 이 경로가 양방향 바인딩의 경로 정보로 사용되는 경우 끝 속성은 읽기/쓰기여야 합니다.

인덱서

데이터 바인딩에 대한 속성 경로에는 인덱싱된 속성에 대한 참조가 포함될 수 있습니다. 이렇게 하면 순서가 지정된 목록/벡터 또는 사전/지도에 바인딩할 수 있습니다. 대괄호 “[]” 문자를 사용하여 인덱싱된 속성을 나타냅니다. 이러한 대괄호의 내용은 정수(순서가 지정된 목록의 경우) 또는 따옴표가 지정되지 않은 문자열(사전의 경우)일 수 있습니다. 키가 정수인 사전에 바인딩할 수도 있습니다. 개체 속성을 구분하는 점이 있는 동일한 경로에 다른 인덱싱된 속성을 사용할 수 있습니다.

예를 들어 각 플레이어가 성으로 키가 지정된 "플레이어" 사전이 있는 "Teams" 목록(순서가 지정된 목록)이 있는 비즈니스 개체를 고려해 보세요. 두 번째 팀의 특정 플레이어에 대한 예제 속성 경로는 “Teams[1].Players[Smith]”입니다. (목록이 인덱싱 되지 않으므로 1을 사용하여 "Teams"의 두 번째 항목을 나타냅니다.)

참고 C++ 데이터 원본에 대한 인덱싱 지원은 제한적입니다. 데이터 바인딩을 자세히 참조하세요.

연결된 속성

속성 경로에는 연결된 속성에 대한 참조가 포함될 수 있습니다. 연결된 속성의 식별 이름에 점이 이미 포함되어 있으므로 점이 개체 속성 단계로 처리되지 않도록 괄호 안에 연결된 속성 이름을 묶어야 합니다. 예를 들어 Canvas.ZIndex를 바인딩 경로로 사용하려는 문자열은 "(Canvas.ZIndex)"입니다. 연결된 속성에 대한 자세한 설명은 연결된 속성 개요를 참조하세요.

속성 경로 구문 결합

속성 경로 구문의 다양한 요소를 단일 문자열로 결합할 수 있습니다. 예를 들어 데이터 원본에 이러한 속성이 있는 경우 인덱싱된 연결된 속성을 참조하는 속성 경로를 정의할 수 있습니다.

바인딩 속성 경로 디버깅

속성 경로는 바인딩 엔진에 의해 해석되고 런타임에만 있을 수 있는 정보를 사용하므로 개발 도구에서 기존의 디자인 타임 또는 컴파일 시간 지원에 의존하지 않고 바인딩에 대한 속성 경로를 디버그 해야 하는 경우가 많습니다. 대부분의 경우 속성 경로를 확인하지 못한 런타임 결과는 바인딩 확인의 디자인 상의 대체 동작이므로 오류 없이 빈 값입니다. 다행히 Microsoft Visual Studio는 바인딩 소스를 지정하는 속성 경로의 어느 부분을 해결하지 못한 부분을 격리할 수 있는 디버그 출력 모드를 제공합니다. 이 개발 도구 기능 사용에 대한 자세한 내용은 데이터 바인딩의 "디버깅" 섹션을 자세히 참조하세요.

애니메이션 대상에 대한 속성 경로

애니메이션은 애니메이션이 실행될 때 스토리보드 값이 적용되는 종속성 속성을 대상으로 합니다. 애니메이션 효과를 주는 속성이 있는 개체를 식별하기 위해 애니메이션은 이름(x:Name 특성)으로 요소를 대상으로 합니다. Storyboard.TargetName으로 식별된 개체로 시작하고 애니메이션이 적용되어야 하는 특정 종속성 속성 값으로 끝나는 속성 경로를 정의해야 하는 경우가 많습니다. 이 속성 경로는 Storyboard.TargetProperty값으로 사용됩니다.

XAML에서 애니메이션을 정의하는 방법에 대한 자세한 내용은 스토리보드 애니메이션을 참조 하세요.

간단한 대상 지정

대상 개체 자체에 있는 속성에 애니메이션 효과를 주는 경우 해당 속성의 형식에 애니메이션을 직접 적용할 수 있는 경우(속성 값의 하위 속성이 아닌) 추가 한정 없이 애니메이션 효과를 주는 속성의 이름을 지정할 수 있습니다. 예를 들어 사각형과 같은 셰이프 하위 클래스를 대상으로 지정하고 Fill 속성에 애니메이션 을 적용하는 경우 속성 경로는 "Fill"일 수 있습니다.

간접 속성 대상 지정

대상 개체의 하위 속성인 속성에 애니메이션 효과를 적용할 수 있습니다. 즉, 개체 자체인 대상 개체의 속성이 있고 해당 개체에 속성이 있는 경우 해당 개체와 속성 간의 관계를 단계별로 진행하는 방법을 설명하는 속성 경로를 정의해야 합니다. 하위 속성에 애니메이션 효과를 주려는 개체를 지정할 때마다 속성 이름을 괄호로 묶고 typename에서 속성을 지정합니다.속성 이름 형식입니다. 예를 들어 대상 개체의 RenderTransform 속성의 개체 값을 지정하려면 속성 경로의 첫 번째 단계로 "(UIElement.RenderTransform)"를 지정합니다. 변환 값에 직접 적용할 수 있는 애니메이션이 없기 때문에 아직 전체 경로가 아닙니다. 따라서 이 예제에서는 이제 끝 속성이 "(UIElement.RenderTransform)"(UIElement.RenderTransform)으로 애니메이션 효과를 받을 수 있는 Transform 하위 클래스의 속성이 되도록 속성 경로를 완료합니다. CompositeTransform.TranslateX)"

컬렉션에서 특정 자식 지정

컬렉션 속성에서 자식 항목을 지정하려면 숫자 인덱서로 지정할 수 있습니다. 정수 인덱스 값 주위에 대괄호(“[]”) 문자를 사용합니다. 사전이 아닌 순서가 지정된 목록만 참조할 수 있습니다. 컬렉션은 애니메이션 효과를 적용할 수 있는 값이 아니므로 인덱서 사용은 속성 경로의 끝 속성이 될 수 없습니다.

예를 들어 컨트롤의 Background 속성에 적용되는 LinearGradientBrush에서 첫 번째 색 정지 색을 애니메이션하도록 지정하려는 경우 속성 경로는 “(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)”입니다. 인덱서가 경로의 마지막 단계가 아니며, 특히 마지막 단계에서 컬렉션에 있는 항목 0의 GradientStop.Color 속성을 참조하여 색 애니메이션 값을 적용해야 합니다.

연결된 속성에 애니메이션 효과 주기

일반적인 시나리오는 아니지만 연결된 속성에 애니메이션 형식과 일치하는 속성 값이 있는 한 연결된 속성에 애니메이션 효과를 줄 수 있습니다. 연결된 속성의 식별 이름에 점이 이미 포함되어 있으므로 점이 개체 속성 단계로 처리되지 않도록 괄호 안에 연결된 속성 이름을 묶어야 합니다. 예를 들어 개체에서 Grid.Row 연결된 속성에 애니메이션 효과를 주도록 지정하는 문자열은 속성 경로 "(Grid.Row)"를 사용합니다.

참고 이 예제에서는 Grid.Row값이 Int32 속성 형식입니다. 이중 애니메이션으로 애니메이션을 적용할 수 없도록 합니다. 대신 DiscreteObjectKeyFrame 구성 요소가 있는 ObjectAnimationUsingKeyFrames를 정의합니다. 여기서 ObjectKeyFrame.Value는 "0" 또는 "1"과 같은 정수로 설정됩니다.

애니메이션 대상 속성 경로의 속성에 대한 규칙

  • 속성 경로의 가정된 시작점은 Storyboard.TargetName으로 식별되는 개체입니다.
  • 속성 경로를 따라 참조되는 모든 개체와 속성은 public이어야 합니다.
  • 끝 속성(경로에서 마지막으로 명명된 속성인 속성)은 public이어야 하고 읽기/쓰기가 가능하며 종속성 속성이어야 합니다.
  • 끝 속성에는 광범위한 애니메이션 형식( 애니메이션, 이중 애니메이션, 점 애니메이션, ObjectAnimationUsingKeyFrames) 중 하나로 애니메이션 효과를 줄 수 있는 속성 형식이 있어야 합니다.

PropertyPath 클래스

PropertyPath 클래스는 바인딩 시나리오에 대한 Binding.Path기본 속성 형식입니다.

대부분의 경우 코드를 전혀 사용하지 않고 XAML에서 PropertyPath를 적용할 수 있습니다. 그러나 경우에 따라 코드를 사용하여 PropertyPath 개체를 정의하고 런타임에 속성에 할당할 수 있습니다.

PropertyPath에는 PropertyPath(String) 생성자가 있으며 기본 생성자는 없습니다. 이 생성자에 전달하는 문자열은 앞에서 설명한 대로 속성 경로 구문을 사용하여 정의된 문자열입니다. 또한 Path를 XAML 특성으로 할당하는 데 사용하는 것과 동일한 문자열입니다. PropertyPath 클래스의 유일한 다른 API는 읽기 전용인 Path 속성입니다. 이 속성을 다른 PropertyPath 인스턴스의 생성 문자열로 사용할 수 있습니다.