닷넷/WPF

WPF Binding Path에 관하여 (바인딩 경로)

FreeBear 2024. 4. 8. 22:02
반응형

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}" />

 

바인딩 선언 개요

PropertyPath XAML 구문

바인딩 경로에 대한 자세한 내용은 위 링크에서 확인할 수 있습니다.  

 

바인딩 경로 오류

WPF에서는 바인딩 경로가 잘못 되었을 때 런타임이 실패하지는 않습니다. 따라서 모르고 넘어갈 수도 있는 일을

Visual Studio 2022에서 WPF를 개발한다면, 바인딩 경로가 잘못 되었을 때 쉽게 알 수 있습니다.

위 이미지와 같이 프로젝트를 빌드하여 실행 하면 바인딩 오류가 있을 때 빨간색 버튼으로 바뀌고, 바인딩 오류 수를 알려줍니다.

이를 클릭하면

어디에서 오류가 있는지 알 수 있습니다.

반응형