source

"{Binding Path="입니다.}"와 "{Binding}"이(가) 완전히 동일합니다.

manysource 2023. 4. 15. 09:03

"{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