WPF 자체에 바인딩


86

나는 WPF Window있고 어딘가에 ListView내가 바인딩하는 곳 List<string>이 있습니다.

이제 내 어딘가에 ListViewa가 TextBox있고 Content속성이로 설정됩니다 {Binding}.

그러나 이것은 속기입니다. 자신에게 바인딩 할 전체 바인딩을 어떻게 작성합니까?

{Binding Path=Self}작동하지 않고 작동하지 않습니다 {Binding Self}(후자는 전자의 지름길 임).


이 주제와 관련된 게시물에 언급하고 싶은데 위의 답변은 완전히 정확하지만 위의 답변을 완성하는 요점이 있습니다. 여기에 링크가 있습니다.
알리 Fattahian

답변:


247

짧은 대답 : "자체에 바인딩"( RelativeSource.Self 의 의미에서 )에 대한 지름길 {Binding}아닙니다 . 오히려 는 현재 소스에 바인딩되는와 동일합니다 .{Binding} {Binding Path=.}


자세히 설명하자면 : 바인딩에는 소스경로가 있습니다. 예를 들어 다음을 사용하여 "자체에 대한 바인딩"을 수행 할 수 있습니다.

<myUIControl myProperty="{Binding RelativeSource={RelativeSource Self}, Path=x}" />

그러나 이것은 소스 를 컨트롤 자체로 설정하므로 현재 데이터 컨텍스트의 x속성 x이 아닌 UI 컨트롤의 속성 에 액세스하려고합니다 . 내가 당신의 질문을 어떻게 이해했는지에 따르면 이것은 당신이 원하는 것이 아닙니다. 특히, 그것은하는 일이 아닙니다 {Binding}: {Binding}소스를있는 그대로 (보통 DataContext부모 요소의 것) 유지하고 소스 자체에 바인딩합니다 ( Path=.).


사용자가 InputBinding의 KeyBinding을 통해 ContextMenu의 MenuItem의 Command 중 하나에 액세스 CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}"하면 SelectedItems를 Bound ICommand에 전달 하는 DataGrid가 있습니다. 그러나 nullContextMenu를 통해 액세스하면 전달됩니다. 나는 시도했다 CommandParameter="{selectedItems를 바인딩} ' , 와`"{selectedItems를 = ElementName을 =으로 myDataGrid 경로를 바인딩} " "{Binding RelativeSource={RelativeSource Self}, Path=SelectedItems}".
Tom

@Tom : 이것은 댓글로 대답하기 어렵습니다. 새 질문을 만들고 재현 가능한 최소한의 예를 제공하십시오 .
Heinzi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.