WPF Binding Path에 관하여 (바인딩 경로)
2023.04.07 - [닷넷/WPF] - C# WPF에서 Binding(바인딩)이란?
C# WPF에서 Binding(바인딩)이란?
WPF에서는 MVVM 패턴을 지키는 게 중요합니다. 개인적으로 생각하기에는 이 MVVM 패턴대로 만들지 않을 것이라면 개발 속도로 봤을 때나 유지보수 적으로 봤을 때나 그냥 윈폼(WinForms)으로 만드는게
jasmintime.com
이전글을 통해서 WPF에서 데이터 바인딩은 UI 요소와 데이터 소스 간의 연결을 쉽게 설정할 수 있는 기능임을 알 수 있습니다. 이 바인딩을 잘 쓰기 위해서는 바인딩 구문을 아는 것이 중요합니다.
그 중에서 바인딩 경로는 몇 가지 유형이 있으며,
경로 지정을 어떻게 하느냐에 따라서 자기 자신의 뷰모델이 아닌 부모 요소 혹은 그 외 기타와 연결지을 수 있고, 코드 비하인드 없이 xaml에서 충분히 이벤트 처리를 할 수도 있습니다.
바인딩 경로 유형
1. 속성 바인딩
앞서 이전글에서도 설명한 유형으로 가장 일반적으로 사용되는 유형입니다.
Path는 생략 가능합니다.
<TextBlock Text="{Binding PropertyName}" />
<!-- 혹은 -->
<TextBlock Text="{Binding Path=PropertyName}" />
2. 속성 경로
복합 객체 내의 속성에 바인딩할 때 사용됩니다.
Path는 생략 가능합니다.
public class MyViewModel : ViewModelBase
{
private Person _person;
public Person Person
{
get => _person;
set => SetProperty(ref _person, value);
}
}
public class Person
{
public string Name {get; set;}
}
<TextBlock Text="{Binding Person.Name}" />
<!-- 혹은 -->
<TextBlock Text="{Binding Path=Person.Name}" />
3. 인덱서
배열이나 딕셔너리와 같은 인덱스를 사용하여 바인딩 할 수 있습니다.
<ListBox ItemsSource="{Binding Persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=[0]}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
4. RelativeSource
상대적인 소스를 참조하여 바인딩할 때 사용됩니다.
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.Persons[0].Name}" />
바인딩 경로에 대한 자세한 내용은 위 링크에서 확인할 수 있습니다.
바인딩 경로 오류
WPF에서는 바인딩 경로가 잘못 되었을 때 런타임이 실패하지는 않습니다. 따라서 모르고 넘어갈 수도 있는 일을
Visual Studio 2022에서 WPF를 개발한다면, 바인딩 경로가 잘못 되었을 때 쉽게 알 수 있습니다.
위 이미지와 같이 프로젝트를 빌드하여 실행 하면 바인딩 오류가 있을 때 빨간색 버튼으로 바뀌고, 바인딩 오류 수를 알려줍니다.
이를 클릭하면
어디에서 오류가 있는지 알 수 있습니다.