속성 경로 구문Property-path syntax

PropertyPath 클래스 및 문자열 구문을 사용 하 여 XAML 또는 코드에서 PropertyPath 값을 인스턴스화할 수 있습니다.You can use the PropertyPath class and the string syntax to instantiate a PropertyPath value either in XAML or in code. PropertyPath 값은 데이터 바인딩에서 사용 됩니다.PropertyPath values are used by data binding. Storyboarded 애니메이션을 대상으로 지정 하는 데 비슷한 구문이 사용 됩니다.A similar syntax is used for targeting storyboarded animations. 두 시나리오 모두에 대해 속성 경로는 궁극적으로 단일 속성으로 확인 되는 하나 이상의 개체 속성 관계 트래버스를 설명 합니다.For both scenarios, a property path describes a traversal of one or more object-property relationships that eventually resolve to a single property.

속성 경로 문자열을 XAML의 특성에 직접 설정할 수 있습니다.You can set a property path string directly to an attribute in XAML. 동일한 문자열 구문을 사용 하 여 코드에서 바인딩을 설정 하는 PropertyPath 을 생성 하거나 SetTargetProperty를 사용 하 여 코드에서 애니메이션 대상을 설정할 수 있습니다.You can use the same string syntax to construct a PropertyPath that sets a Binding in code, or to set an animation target in code using SetTargetProperty. 속성 경로를 사용 하는 Windows 런타임에는 데이터 바인딩 및 애니메이션 대상 지정의 두 가지 고유한 기능 영역이 있습니다.There are two distinct feature areas in the Windows Runtime that use a property path: data binding, and animation targeting. 애니메이션 대상 지정은 Windows 런타임 구현에서 기본 속성 경로 구문 값을 만들지 않지만 정보를 문자열로 유지 하지만 개체 속성 순회의 개념은 매우 유사 합니다.Animation targeting doesn't create underlying Property-path syntax values in the Windows Runtime implementation, it keeps the info as a string, but the concepts of object-property traversal are very similar. 데이터 바인딩 및 애니메이션 대상 지정은 각각 속성 경로를 약간 다르게 평가 하므로 각각에 대해 개별적으로 속성 경로 구문을 설명 합니다.Data binding and animation targeting each evaluate a property path slightly differently, so we describe property path syntax separately for each.

데이터 바인딩에서 개체의 속성 경로Property path for objects in data binding

Windows 런타임에서 종속성 속성의 대상 값에 바인딩할 수 있습니다.In Windows Runtime, you can bind to the target value of any dependency property. 데이터 바인딩의 원본 속성 값은 종속성 속성이 아니어도 됩니다. 비즈니스 개체의 속성 (예: Microsoft .NET 언어 또는 c + +로 작성 된 클래스) 일 수 있습니다.The source property value for a data binding doesn't have to be a dependency property; it can be a property on a business object (for example a class written in a Microsoft .NET language or C++). 또는 바인딩 값의 원본 개체는 이미 앱에서 정의한 기존 종속성 개체 일 수 있습니다.Or, the source object for the binding value can be an existing dependency object already defined by the app. 소스는 간단한 속성 이름 또는 비즈니스 개체의 개체 그래프에 있는 개체 속성 관계의 순회를 통해 참조할 수 있습니다.The source can be referenced either by a simple property name, or by a traversal of the object-property relationships in the object graph of the business object.

개별 속성 값에 바인딩하거나 목록 또는 컬렉션을 보유 하는 대상 속성에 바인딩할 수 있습니다.You can bind to an individual property value, or you can bind to a target property that holds lists or collections. 소스가 컬렉션인 경우 또는 경로에서 컬렉션 속성을 지정 하는 경우 데이터 바인딩 엔진은 소스의 컬렉션 항목을 바인딩 대상에 일치 시킵니다. 그러면 해당 컬렉션의 특정 항목을 예상할 필요 없이 데이터 원본 컬렉션의 항목 목록으로 ListBox 를 채우는 것과 같은 동작이 발생 합니다.If your source is a collection, or if the path specifies a collection property, the data-binding engine matches the collection items of the source to the binding target, resulting in behavior such as populating a ListBox with a list of items from a data source collection without needing to anticipate the specific items in that collection.

개체 그래프 트래버스Traversing an object graph

개체 그래프에서 개체 속성 관계의 순회를 나타내는 구문의 요소는 점 (.) 문자입니다.The element of the syntax that denotes the traversal of an object-property relationship in an object graph is the dot (.) character. 속성 경로 문자열의 각 점은 개체 (점 왼쪽)와 해당 개체의 속성 (점 오른쪽) 간의 나누기를 나타냅니다.Each dot in a property path string indicates a division between an object (left side of the dot) and a property of that object (right side of the dot). 문자열은 왼쪽에서 오른쪽으로 계산 되어 여러 개체 속성 관계를 단계별로 실행할 수 있습니다.The string is evaluated left-to-right, which enables stepping through multiple object-property relationships. 예를 살펴보겠습니다.Let's look at an example:

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

이 경로를 평가 하는 방법은 다음과 같습니다.Here's how this path is evaluated:

  1. 데이터 컨텍스트 개체 (또는 같은 바인딩에서지정한 원본 )가 "Customer" 라는 속성을 검색 합니다.The data context object (or a Source specified by the same Binding) is searched for a property named "Customer".
  2. "Customer" 속성의 값인 개체는 "Address" 라는 속성을 검색 합니다.The object that is the value of the "Customer" property is searched for a property named "Address".
  3. "Address" 속성의 값인 개체는 "StreetAddress1" 라는 속성을 검색 합니다.The object that is the value of the "Address" property is searched for a property named "StreetAddress1".

이러한 각 단계에서 값은 개체로 처리 됩니다.At each of these steps, the value is treated as an object. 바인딩이 특정 속성에 적용 되는 경우에만 결과 형식이 확인 됩니다.The type of the result is checked only when the binding is applied to a specific property. 이 예에서는 "주소"가 주소에 대 한 문자열의 부분을 노출 하지 않는 문자열 값일 경우 실패 합니다.This example would fail if "Address" were just a string value that didn't expose what part of the string was the street address. 일반적으로 바인딩은 알려져 있고 의도적인 정보 구조가 있는 비즈니스 개체의 중첩 된 특정 속성 값을 가리킵니다.Typically, the binding is pointing to the specific nested property values of a business object that has a known and deliberate information structure.

데이터 바인딩 속성 경로에 있는 속성에 대 한 규칙Rules for the properties in a data-binding property path

  • 속성 경로에서 참조 하는 모든 속성은 원본 비즈니스 개체에서 public 이어야 합니다.All properties referenced by a property path must be public in the source business object.
  • End 속성 (경로의 마지막으로 명명 된 속성)은 public 이어야 하며 변경할 수 있어야 합니다. 정적 값에 바인딩할 수 없습니다.The end property (the property that is the last named property in the path) must be public and must be mutable – you can't bind to static values.
  • 이 경로가 양방향 바인딩의 경로 정보로 사용 되는 경우 end 속성은 읽기/쓰기가 가능 해야 합니다.The end property must be read/write if this path is used as the Path information for a two-way binding.

인덱서Indexers

데이터 바인딩의 속성 경로에는 인덱싱된 속성에 대 한 참조가 포함 될 수 있습니다.A property path for data-binding can include references to indexed properties. 이렇게 하면 정렬 된 목록/벡터 또는 사전/지도에 바인딩할 수 있습니다.This enables binding to ordered lists/vectors, or to dictionaries/maps. 대괄호 " [ ] " 문자를 사용 하 여 인덱싱된 속성을 표시 합니다.Use square brackets "[]" characters to indicate an indexed property. 이러한 대괄호의 내용은 정수 (순서 있는 목록) 또는 따옴표 붙지 않은 문자열 (사전) 중 하나일 수 있습니다.The contents of these brackets can be either an integer (for ordered list) or an unquoted string (for dictionaries). 키가 정수인 사전에 바인딩할 수도 있습니다.You can also bind to a dictionary where the key is an integer. 개체 속성을 구분 하는 점을 사용 하 여 동일한 경로에 서로 다른 인덱싱된 속성을 사용할 수 있습니다.You can use different indexed properties in the same path with a dot separating the object-property.

예를 들어, 각 플레이어가 성에 따라 키가 지정 된 "팀" (주문 된 목록) 목록이 있는 비즈니스 개체를 생각해 보겠습니다.For example, consider a business object where there is a list of "Teams" (ordered list), each of which has a dictionary of "Players" where each player is keyed by last name. 두 번째 팀의 특정 플레이어에 대 한 속성 경로 예는 "팀 [ 1" ] 입니다. 플레이어 [ Smith ] ".An example property path to a specific player on the second team is: "Teams[1].Players[Smith]". 1은 "팀"에서 두 번째 항목을 나타내는 데 사용 됩니다. 목록은 0으로 인덱싱됩니다.(You use 1 to indicate the second item in "Teams" because the list is zero-indexed.)

참고    C + + 데이터 소스에 대 한 인덱싱 지원은 제한 됩니다. 자세한 내용은 데이터 바인딩을참조 하세요.Note  Indexing support for C++ data sources is limited; see Data binding in depth.

연결된 속성Attached properties

속성 경로에는 연결 된 속성에 대 한 참조가 포함 될 수 있습니다.Property paths can include references to attached properties. 연결 된 속성의 식별 이름에는 이미 점이 포함 되어 있으므로 점이 개체 속성 단계로 처리 되지 않도록 괄호 안에 연결 된 속성 이름을 묶어야 합니다.Because the identifying name of an attached property already includes a dot, you must enclose any attached property name within parentheses so that the dot isn't treated as an object-property step. 예를 들어 ZIndex 를 바인딩 경로로 사용 하도록 지정 하는 문자열은 "(Canvas. ZIndex)"입니다.For example, the string to specify that you want to use Canvas.ZIndex as a binding path is "(Canvas.ZIndex)". 연결 된 속성에 대 한 자세한 내용은 연결 된 속성 개요를 참조 하세요.For more info on attached properties see Attached properties overview.

속성 경로 구문 조합Combining property path syntax

속성 경로 구문의 여러 요소를 단일 문자열로 결합할 수 있습니다.You can combine various elements of property path syntax in a single string. 예를 들어 데이터 원본에 이러한 속성이 있는 경우 인덱싱된 연결 속성을 참조 하는 속성 경로를 정의할 수 있습니다.For example, you can define a property path that references an indexed attached property, if your data source had such a property.

바인딩 속성 경로 디버깅Debugging a binding property path

속성 경로는 바인딩 엔진에서 해석 되 고 런타임에만 나타날 수 있는 정보를 사용 하기 때문에 개발 도구에서 기본 디자인 타임 또는 컴파일 시간 지원을 사용 하지 않고도 바인딩의 속성 경로를 디버깅 해야 하는 경우가 많습니다.Because a property path is interpreted by a binding engine and relies on info that may be present only at run-time, you must often debug a property path for binding without being able to rely on conventional design-time or compile-time support in the development tools. 대부분의 경우 속성 경로를 확인 하지 못하는 런타임 결과는 바인딩 확인의 디자인 대체 동작 이므로 오류가 없는 빈 값입니다.In many cases the run-time result of failing to resolve a property path is a blank value with no error, because that is the by-design fallback behavior of binding resolution. 다행히 Microsoft Visual Studio는 바인딩 소스를 지정 하는 속성 경로의 일부를 확인 하지 못한 부분을 격리할 수 있는 디버그 출력 모드를 제공 합니다.Fortunately, Microsoft Visual Studio provides a debug output mode that can isolate which part of a property path that's specifying a binding source failed to resolve. 이 개발 도구 기능 사용에 대 한 자세한 내용은 데이터 바인딩의 "디버깅" 섹션을 자세히참조 하세요.For more info on using this development tool feature, see "Debugging" section of Data binding in depth.

애니메이션 대상 지정을 위한 속성 경로Property path for animation targeting

애니메이션은 애니메이션이 실행 될 때 storyboarded 값이 적용 되는 종속성 속성을 대상으로 지정 합니다.Animations rely on targeting a dependency property where storyboarded values are applied when the animation runs. 애니메이션 효과가 적용 될 속성이 있는 개체를 식별 하기 위해 애니메이션은 이름 (x:Name 특성)에 따라 요소를 대상으로 지정 합니다.To identify the object where the property to be animated exists, the animation targets an element by name (x:Name attribute). 일반적으로 Storyboard. TargetName으로 식별 되는 개체에서 시작 하 여 애니메이션이 적용 되는 특정 종속성 속성 값으로 끝나는 속성 경로를 정의 해야 합니다.It is often necessary to define a property path that starts with the object identified as the Storyboard.TargetName, and ends with the particular dependency property value where the animation should apply. 해당 속성 경로는 system.windows.media.animation.storyboard.targetproperty의 값으로 사용 됩니다.That property path is used as the value for Storyboard.TargetProperty.

XAML에서 애니메이션을 정의 하는 방법에 대 한 자세한 내용은 참조 Storyboarded 애니메이션합니다.For more info on the how to define animations in XAML, see Storyboarded animations.

단순 대상 지정Simple targeting

대상 개체 자체에 있는 속성에 애니메이션 효과를 적용 하 고 해당 속성의 형식이 속성 값의 하위 속성이 아닌 해당 속성에 직접 애니메이션을 적용할 수 있는 경우에는 추가 한정자 없이 속성의 이름을 지정할 수 있습니다.If you are animating a property that exists on the targeted object itself, and that property's type can have an animation applied directly to it (rather than to a sub-property of a property's value) then you can simply name the property being animated without any further qualification. 예를 들어 사각형과같은 셰이프 하위 클래스를 대상으로 하 고 Fill 속성에 애니메이션 을 적용 하는 경우 속성 경로는 "fill"이 될 수 있습니다.For example, if you are targeting a Shape subclass such as Rectangle, and you are applying an animated Color to the Fill property, your property path can be "Fill".

간접 속성 대상 지정Indirect property targeting

대상 개체의 하위 속성인 속성에 애니메이션 효과를 적용할 수 있습니다.You can animate a property that is a sub-property of the target object. 즉, 개체 자체에 해당 하는 대상 개체의 속성이 있고 해당 개체에 속성이 있는 경우 해당 개체 속성 관계를 단계별로 실행 하는 방법을 설명 하는 속성 경로를 정의 해야 합니다.In other words, if there's a property of the target object that's an object itself, and that object has properties, you must define a property path that explains how to step through that object-property relationship. 하위 속성에 애니메이션을 적용할 개체를 지정할 때마다 속성 이름을 괄호로 묶고 typename으로 속성을 지정 합니다. propertyname 형식입니다.Whenever you are specifying an object where you want to animate a sub-property, you enclose the property name in parentheses, and you specify the property in typename.propertyname format. 예를 들어 대상 개체의 rendertransform 속성의 개체 값을 지정 하려면 속성 경로의 첫 번째 단계로 "(UIElement rendertransform)"을 지정 합니다.For example, to specify that you want the object value of a target object's RenderTransform property, you specify "(UIElement.RenderTransform)" as the first step in the property path. 변환 값에 직접 적용할 수 있는 애니메이션이 없기 때문에이는 아직 전체 경로가 아닙니다.This isn't yet a complete path, because there are no animations that can apply to a Transform value directly. 이 예에서는 이제 속성 경로를 완료 하 여 end 속성이 Double 값으로 애니메이션을 적용할 수 있는 Transform 하위 클래스의 속성 인 "(UIElement rendertransform)을 완료 합니다. (CompositeTransform.TranslateX)"So for this example, you now complete the property path so that the end property is a property of a Transform subclass that can be animated by a Double value: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

컬렉션에서 특정 자식 지정Specifying a particular child in a collection

컬렉션 속성에서 자식 항목을 지정 하려면 숫자 인덱서를 사용할 수 있습니다.To specify a child item in a collection property, you can use a numeric indexer. [ ] 정수 인덱스 값 주위에 대괄호 "" 문자를 사용 합니다.Use square brackets "[]" characters around the integer index value. 사전이 아닌 정렬 된 목록만 참조할 수 있습니다.You can reference only ordered lists, not dictionaries. 컬렉션은 애니메이션이 적용 될 수 있는 값이 아니기 때문에 인덱서 사용은 속성 경로에서 끝 속성 일 수 없습니다.Because a collection isn't a value that can be animated, an indexer usage can never be the end property in a property path.

예를 들어, 컨트롤의 배경 속성에 적용 되는 system.windows.media.lineargradientbrush.startpoint 의 첫 번째 색 중지 색에 애니메이션 효과를 적용 하도록 지정 하려면 속성 경로: "(control. Background). (Gradientbrush가 아니며. GradientStops) [ 0 ] . ( GradientStop) ".For example, to specify that you want to animate the first color stop color in a LinearGradientBrush that is applied to a control's Background property, this is the property path: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". 인덱서의 마지막 단계가 아니라 마지막 단계에서 컬렉션에 있는 항목 0의 GradientStop 속성을 참조 하 여 에 애니메이션 효과를 적용 해야 하는지 확인 합니다.Note how the indexer is not the last step in the path, and that the last step particularly must reference the GradientStop.Color property of item 0 in the collection to apply a Color animated value to it.

연결 된 속성에 애니메이션 적용Animating an attached property

일반적인 시나리오는 아니지만 연결 된 속성에 애니메이션 형식과 일치 하는 속성 값이 있는 한 연결 된 속성에는 애니메이션 효과를 적용할 수 있습니다.It isn't a common scenario, but it is possible to animate an attached property, so long as that attached property has a property value that matches an animation type. 연결 된 속성의 식별 이름에는 이미 점이 포함 되어 있으므로 점이 개체 속성 단계로 처리 되지 않도록 괄호 안에 연결 된 속성 이름을 묶어야 합니다.Because the identifying name of an attached property already includes a dot, you must enclose any attached property name within parentheses so that the dot isn't treated as an object-property step. 예를 들어, 개체에 대 한 연결 된 속성에 애니메이션 효과를 주려면 속성 경로 "(Grid. row)"를 사용 하는 문자열을 지정할 수 있습니다.For example, the string to specify that you want to animate the Grid.Row attached property on an object, use the property path "(Grid.Row)".

참고    이 예제에서 Grid. Row 값은 Int32 속성 형식입니다.Note  For this example, the value of Grid.Row is an Int32 property type. 따라서 이중 애니메이션으로 애니메이션 효과를 적용할 수 없습니다.so you can't animate it with a Double animation. 대신 DiscreteObjectKeyFrame 구성 요소를 포함 하는 ObjectAnimationUsingKeyFrames 를 정의 합니다. 여기서 objectkeyframe. 값 은 "0" 또는 "1"과 같은 정수로 설정 됩니다.Instead, you'd define an ObjectAnimationUsingKeyFrames that has DiscreteObjectKeyFrame components, where the ObjectKeyFrame.Value is set to an integer such as "0" or "1".

애니메이션 대상 속성 경로의 속성에 대 한 규칙Rules for the properties in an animation targeting property path

  • 속성 경로의 시작 지점은 Storyboard. TargetName에 의해 식별 되는 개체입니다.The assumed starting point of the property path is the object identified by a Storyboard.TargetName.
  • 속성 경로를 따라 참조 되는 모든 개체와 속성은 public 이어야 합니다.All objects and properties referenced along the property path must be public.
  • End 속성 (경로의 마지막으로 명명 된 속성)은 public 이어야 하 고, 읽기/쓰기가 가능 하 고, 종속성 속성 이어야 합니다.The end property (the property that is the last named property in the path) must be public, be read-write, and be a dependency property.
  • End 속성에는 애니메이션 형식의 광범위 한 클래스 ( 애니메이션, 이중 애니메이션, 애니메이션, ObjectAnimationUsingKeyFrames) 중 하나에서 애니메이션을 적용할 수 있는 속성 형식이 있어야 합니다.The end property must have a property type that is able to be animated by one of the broad classes of animation types (Color animations, Double animations, Point animations, ObjectAnimationUsingKeyFrames).

PropertyPath 클래스The PropertyPath class

PropertyPath 클래스는 바인딩의 기본 속성 형식입니다. 바인딩 시나리오에 대 한 경로입니다.The PropertyPath class is the underlying property type of Binding.Path for the binding scenario.

대부분의 경우 코드를 전혀 사용 하지 않고 XAML에서 PropertyPath 을 적용할 수 있습니다.Most of the time, you can apply a PropertyPath in XAML without using any code at all. 그러나 경우에 따라 코드를 사용 하 여 PropertyPath 개체를 정의 하 고 런타임에이 개체를 속성에 할당할 수 있습니다.But in some cases you may want to define a PropertyPath object using code and assign it to a property at run-time.

PropertyPath 에는 PropertyPath (String) 생성자가 있고 기본 생성자가 없습니다.PropertyPath has a PropertyPath(String) constructor, and doesn't have a default constructor. 이 생성자에 전달 하는 문자열은 앞에서 설명한 대로 속성 경로 구문을 사용 하 여 정의 된 문자열입니다.The string you pass to this constructor is a string that's defined using the property path syntax as we explained earlier. 이는 또한 경로 를 XAML 특성으로 할당 하는 데 사용 하는 것과 동일한 문자열입니다.This is also the same string you'd use to assign Path as a XAML attribute. PropertyPath 클래스의 유일한 다른 API는 읽기 전용 경로 속성입니다.The only other API of the PropertyPath class is the Path property, which is read-only. 이 속성은 다른 PropertyPath 인스턴스에 대 한 생성 문자열로 사용할 수 있습니다.You could use this property as the construction string for another PropertyPath instance.