이전 포스팅에서 언급했던 것과 같이 PasswordBox 의 Password 속성은 string 이 아닌 SecureString 입니다. learn.microsoft.com 에는 보안을 위해 프로세스 메모리에 일반 문자열로 저장하지 않는다고 설명되어 있습니다. 이런 이유로 xaml에서 Binding 이 되지 않습니다. CodeBehind에 약간의 코드를 추가하여 ViewModel에 Binding 하는 방법입니다.
✅ Password 속성에 Binding 하는 방법
View의 DataContext로 ViewModel이 연결되어있어야합니다. (Binding 을 선호하지만 View.DataContext = ViewModel; 형태여도 상관없습니다.)
ViewModel
public class LoginViewModel : BaseViewModel
{
public string Password { get; set; }
}
ViewModel에 Password를 받을 property를 생성합니다.
xaml
<PasswordBox x:Name="APasswordBox" FontSize="16"
PasswordChanged="APasswordBox_PasswordChanged">
<PasswordBox.InputBindings>
<KeyBinding Gesture="Enter" Command="{Binding CmdLogin}"/>
</PasswordBox.InputBindings>
</PasswordBox>
PasswordBox를 생성하고 x:Name 을 설정합니다. CodeBehind에서 필요합니다.
PasswordChanged 속성에 이벤트 처리기를 추가합니다.
xaml.cs (Codebehind)
private void APasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
{
if (this.DataContext != null)
{ ((LoginViewModel)this.DataContext).Password = ((PasswordBox)sender).Password; }
}
xaml Editor 화면에서 F7을 눌러 CodeBehind를 열고 위의 코드를 추가합니다.
PasswordBox의 Password가 변경되면 LoginViewModel의 Password의 값이 업데이트됩니다.
✅ Password 속성에 Binding 하는 방법 - 끝
관련 포스팅
PasswordBox,TextBox: Enter 입력 시 Command 실행 (MVVM)
PasswordBox: Password 속성에 Binding 하는 두 번째 방법 (Attached Property)