[C#/WPF] 객체의 속성을 Binding해서 사용하는 방법

  UserVo라는 로그인 정보를 담는 객체를 위한 클래스가 있습니다. UserId, UserPw, UserName 등 여러 유저 정보가 들어있죠.

  회원가입 윈도우의 코드에는 이 UserVo 클래스의 객체가 UserVo라는 속성으로 정의돼 있습니다.

  저는 이 속성 값을 그대로 Binding시켜 사용하려고 했습니다. 여기저기 구글링도 하고 스택오버플로우도 뒤져보고 했지만 키워드를 이상하게 선정했는지 작동하는 코드를 찾을 수 없었습니다.

  그래서 혼자서 DataContext도 바꿔보고, Binding Source 및 Path도 바꿔보고 하다가 Source를 UserVo로, Path를 UserId, UserPw, UserName, ...으로 해서 일단 작동하게 하긴 했는데 아예 XAML에 몰아서 하는 방법도 있어서 올립니다.

// XAML
<Window.Resources>
    <local:UserVo x:Key="UserVo" />
</Window.Resources>
<!-- ... -->
<TextBox Text={Binding Source={StaticResource UserVo}, Path={UserId} />

  현재 윈도우 객체의 리소스에 UserVo 클래스의 인스턴스를 추가하고, Binding할 때 Source를 리소스에 있는 인스턴스로, Path를 인스턴스의 프로퍼티명으로 설정하는 작업입니다.

// MyWindow.cs
public partial class MyWindow : Window
{
    public UserVo UserVo => (UserVo) this.Resources["UserVo"];

    // ...
}

  그리고 코드에서도 사용할 수 있게 public 한정자로 UserVo를 선언하고, x:Key로 할당한 "UserVo"라는 이름의 리소스를 참조하게 합니다.

  완성. 기본값인 Two-way binding 상태이며 이상 없이 작동하는 걸 볼 수 있을 겁니다.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭

테일즈위버 OST 전곡 모음