2010-11-29 6 views

답변

13

아무 것도 없습니다.

지정하지 않으면 Path 속성에 값이 할당됩니다. 즉, 경로는 바인딩의 기본 속성입니다.

많은 콘트롤의 기본 속성 인 "콘텐트"속성과 같습니다. 예를 들어

<Button>Hello</Button> 도움이 <Button><Button.Content><TextBlock Text="Hello"/></Button>

희망과 동일합니다.

+7

표면적으로 콘텐츠 속성과 비슷하지만 메커니즘은 완전히 다릅니다. ContentPropertyAttribute 때문에 콘텐츠 속성이 작동합니다. Button의 경우 ContentControl 기본 클래스에서 가져옵니다.이 특성은 Xaml에게 Content 속성과 동일 함을 알려줍니다. 그러나 바인딩을 사용하면 Binding이 Path 속성과 동일한 작업을 수행하는 1 인수 생성자를 제공하기 때문에 간단하게 작동합니다. 완전히 다른 메커니즘 - Joe White의 답변을 참조하십시오. –

+0

뭔가 다른 것이 있어야합니다. 경로를 생략하고 문제가 발생하면 동작이 변경되었습니다. 내 경우에는 하나의 프로젝트에서 {binding propertyname}을 사용하고 속성을 두 가지 방법으로 업데이트하고 잘 작동합니다. 그러나 동일한 뷰 모델 바이너리를 사용하여 정확히 동일한 xaml을 다른 프로젝트에 넣었지만 바인딩이 한 가지 방식으로 작동하는 것처럼 보입니다. 이 문제를 해결하려면 {binding path = propertyname, mode = twoway}를 명시 적으로 정의한 다음 정상적으로 작동해야합니다. –

+0

나는 H.B.를 믿는다. 그 대답에 대해 뭔가 언급했습니다. 결국, 당신이 더 명백하다면, 당신은 놀라움을 덜 느끼지만, 나는 그 '지름길'이 유용하다는 것을 알게됩니다. –

3

차이점이 있다고 생각하지 마십시오. 아마도 두 번째가 더 명확 할 것입니다.

5

의미 상 차이점이 없습니다. 속성 이름이 제공되지 않으면 바인딩의 첫 번째 속성이 "경로"속성으로 해석됩니다.

코딩 스타일의 문제입니다.

업데이트

문장 "그것은 기본 속성입니다"를 제거.

"기본 속성"은 공식적으로 지원되지 않지만이 시나리오는 "기본 속성"이라고도하며 규칙에 따라 지원됩니다.

예, 바인딩 태그 확장의 경로 속성에 대한 MSDN documentation에서 :

바인딩 태그 확장이 경로 = 필요하지 않는 개념 "기본 속성"로 Binding.Path를 사용 표현에 나타난다.

나는이 용어를 사용하는 것이 틀렸다고 생각하지 않는다. 나는 또한 그것이 어떻게 구현되는지를 이해한다.

+0

사실 그것은 생성자 매개 변수입니다. 마크 업 확장에 대한 '기본 속성'은 없습니다. –

+0

@Joe 물론, 기본 동작 \ 의미가 있습니다. 대회입니다. –

+0

예, 그렇지만 그런 것이 없기 때문에 "기본 속성"이라는 용어를 사용하는 것은 도움이되지 않습니다.그리고 존재하지 않는 개념에 달려있는 설명의 문제점은 사람들이 다른 상황에서 그 개념을 시도하고 적용하는 것이 좋으며, 이는 도움이되지 않을 것이라는 점입니다. (ArrayExtension의 '기본 속성'에는 1-arg 생성자가 두 개 있습니다!) "기본 속성"문장을 제거하기 위해 편집하여 크게 향상시킬 수 있습니다. –

21

그들은 동일한 것을 의미합니다. 서로 다른 곳은 Binding 객체가 인스턴스화되고 채워지는 방식입니다.

{Binding Path=Foo} 

은 매개 변수없는 생성자를 사용하여 Binding 인스턴스를 만든 다음 인스턴스의 Path 속성을 설정합니다.

{Binding Foo} 

는 단일 파라미터 생성자를 사용하여 바인딩 인스턴스를 생성하고, 그 생성자 파라미터 값 "푸"를 전달한다. 단일 매개 변수 생성자는 Path 속성을 설정하기 만하므로 두 구문이 동일합니다.

이것은 사용자 지정 특성의 구문과 매우 유사하며 생성자 매개 변수를 전달하거나 속성 값을 설정할 수도 있습니다.

+4

그들이 동등하지 않은 경우가있을 수 있습니다. 자세한 내용은 내 대답을 참조하십시오. –

40

여기에 입니다. 여기서 중요한 차이점은 입력 된 매개 변수가있는 복잡한 속성 경로를 사용하는 즉시 실행된다는 것입니다.

개념적으로 그들은 모두 Binding.Pathparameterized Binding constructor을 통해 하나의 속성을 통해 직접 설정함으로써 결국 동일합니다. Binding.Path은 두 경우 모두 속성으로 전달되는 문자열이 아니기 때문에 내부적으로 매우 다릅니다. PropertyPath입니다.

XAML이 구문 분석 될 때 type converters은 문자열을 속성에 의해 예상되는 형식으로 변환하는 데 사용됩니다. 따라서 Path=을 사용하면 PropertyPathConverter이 인스턴스화되어 문자열을 구문 분석하고 PropertyPath을 반환합니다.

internal PropertyPath(string, ITypeDescriptorContext)를 호출 호출

방법이 작업을 수행합니다 (Binding 생성자의 경우, Object[]이 비어있을 것입니다) : 지금 여기에 차이는 문제?

예를 들어 multiple indexers in a class 인 경우. int을 예상하는 string 하나를 기대 한 당신은 캐스트가 작동하지 않습니다 후자를 대상으로 값을 캐스팅해야 할 :

{Binding [(sys:Int32)0]} 

대중 생성자 유형 있도록 호출되기 때문에 PropertyPathITypeDescriptorContext을 부족 System.Int32sys:Int32 문자열에서 확인할 수 없습니다.

당신이 형식 변환기가 대신 사용됩니다 및 유형이 컨텍스트를 사용하여 해결 될 것입니다, 그래서 이것은 작동하지만 Path=를 사용하는 경우 :

{Binding Path=[(sys:Int32)0]} 

(인가하지 구현 세부 사항 재미?)

+0

통찰력. 감사! –

+1

@DiegoMijelshon : 조 화이트의 대답을 받아 들일 것을 환영합니다. 받아 들여지는 것이 하나의 모호한 것으로 받아 들여집니다. 가장 실용적인 목적으로 화이트의 대답은 내가 가장 정확하다고 생각하는 대답이다. (물론 내 것을 받아 들일지는 모르겠다.) –

+0

아무도 여러 시간 동안 다른 사람과 함께 왔기 때문에 받아 들여지지 않았다 :-) 다른 사람들을 실제로 테스트하지 않고 수락 된 대답을 바꾸는 것은 공정하지 않을 것이다. 이것은 15 개월 전이었습니다. –