"{Binding Path="입니다.}"와 "{Binding}"이(가) 완전히 동일합니다.
내 WPF 프로젝트에는 ListBox가 있으며 ListBox에 있는 경우List<string>
수집.이러한 항목의 텍스트를 편집 가능하게 하고 싶었기 때문에 각각 TextBox와 함께 ItemTemplate로 포장했습니다(최선의 방법은 아닐 수도 있지만 WPF는 처음입니다.단순히 TextBoxes의 Text 속성을 각 항목의 값에 바인딩하는 데 문제가 있었습니다.Path 속성에 하나의 점 또는 마침표를 사용한 예를 우연히 발견했습니다({Binding Path=.}
):
<ListBox ItemsSource="{Binding ElementName=recipesListbox,Path=SelectedItem.Steps}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
하지만 왜 단순히 이 기능을 사용하는지 이해할 수 없습니다.{Binding}
효과가 없었습니다.
Microsoft에 의하면, 「양방향 바인딩은 패스 또는 XPath를 필요로 한다」예외가 발생했습니다.
[...] 마침표(.) 경로를 사용하여 현재 원본에 바인딩할 수 있습니다.예를 들어 Text="{Binding}"은 Text="{Binding Path="와 동일합니다.}"
누가 이 애매모호한 행동을 밝혀줄 수 있을까?
편집: 게다가,{Binding Path=.}
는 텍스트를 수정하고 포커스를 이동해도 기본 소스가 업데이트되지 않기 때문에 반드시 양방향 바인딩을 제공하는 것은 아닙니다(동일한 소스에는 DataGrid 컨트롤에서 속성이 표시 및 성공적으로 수정됨).뭔가 놓치고 있는 게 분명해
예외적으로 binding-source 자체를 양방향으로 바인드할 수 없기 때문에 원하는 대로 동작하지 않는 바인딩을 작성하지 않도록 하는 것이 포인트입니다.사용방법{Binding Path=.}
에러 검출을 속이기만 하면 됩니다.
(또한 MSDN 문서에는 일반적으로 관심이 있는 중요한 포인트가 포함되어 있기 때문에 저는 MSDN 문서를 매우 좋아합니다만, 그 문서가 틀리거나 부정확한 것은 아닙니다.)
문서에는 다음과 같이 기술되어 있습니다.{Binding}
와 동등하다{Binding Path=.}
단, 이 값은 에 해당하지 않습니다.{Binding Path}
입력하신 대로입니다.를 포함할 경우Path
재산, 당신은 그것을 무언가에 할당해야 합니다, 그렇죠?Path=.
또는Path=OtherProperty
.
즉, 이 둘의 차이는 기존의 pass by 값과 pass by reference의 차이와 유사합니다.(FYR - pass by reference와 pass by value의 차이는 무엇입니까?)
그러나 단순히 {Binding}을(를) 사용하는 것이 작동하지 않는 이유를 이해할 수 없습니다(이 때문에 "Two-way binding needs Path or XPath" 예외가 발생함).
에서는요,여러분,여러분,여러분,여러분,여러분,여러분.{Binding}
는 양방향 바인딩에 사용할 수 있습니다.으로는 ★★★★★★★★★★★★★★★」{Binding}
데이터 텍스트데이터 텍스트의 datacontext 。
반에 whereas whereas.{Binding Path=.}
현재 datacontext에 '도트'를 붙입니다(datacontext에를 붙입니다.(이 경우 현재 데이터콘텍스트에 '점'을 찍습니다).
이게 도움이 됐으면 좋겠네요!
이것들은 같지 않다.ConsoleMessages가 {Binding}만 있는 관찰 가능한 수집 문자열인 경우 이 문자열을 바인딩하면 "Two-way binding requires Path or XPath" 예외({Binding Path=)가 표시됩니다.}이(가) 작동합니다.이것은 WPF 4.0의 경우입니다.
<ItemsControl x:Name="ConsoleOutput" ItemsSource="{Binding ConsoleMessages, Mode=OneWay}" MaxHeight="400">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=.}" BorderThickness="0" Margin="0" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
내 2펜스짜리...
언급URL : https://stackoverflow.com/questions/5488014/are-binding-path-and-binding-really-equal
'source' 카테고리의 다른 글
Swift에서 어레이의 처음 5개 개체를 반환하는 방법 (0) | 2023.04.15 |
---|---|
이름 "XYZ"가 네임스페이스 "clr-namespace"에 없습니다.ABC" (0) | 2023.04.15 |
WPF DataGrid를 가변 개수의 열에 바인드하려면 어떻게 해야 합니까? (0) | 2023.04.15 |
목록을 N개 크기의 작은 목록으로 분할 (0) | 2023.04.15 |
숏컷에서 특정 디렉토리의 Powershell을 엽니다. (0) | 2023.04.15 |