본문 바로가기
개발 상자/.NET VB

.Net VB WPF DataGrid PasswordBox

by 생각의검 2023. 4. 5.

WPF DataGrid 칼럼 값을 패스워드 형식으로 보여 주기 위해서는 해당 Class 사용하면 편한다.

 

C#은 참고 데이터가 많지만, VB는 없어 자료를 공유한다.

 

 

 

 xmlns:local 선언 후

 

<DataGrid.Columns>
  <DataGridTextColumn  Width="2*" Header="ID" Binding="{Binding ID}"/>
    <DataGridTemplateColumn   Width="2*" Header="Password"> 
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <PasswordBox local:PasswordHelper.Attach="True"   local:PasswordHelper.Password="{Binding Password />
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

 

 

PasswordHelper Class

Public NotInheritable Class PasswordHelper

   Private Sub New()
   End Sub

   Public Shared ReadOnly PasswordProperty As DependencyProperty = DependencyProperty.RegisterAttached("Password", GetType(String), GetType(PasswordHelper), New FrameworkPropertyMetadata(String.Empty, New PropertyChangedCallback(AddressOf OnPasswordPropertyChanged)))

   Public Shared ReadOnly AttachProperty As DependencyProperty = DependencyProperty.RegisterAttached("Attach", GetType(Boolean), GetType(PasswordHelper), New PropertyMetadata(False, New PropertyChangedCallback(AddressOf Attach)))

   Private Shared ReadOnly IsUpdatingProperty As DependencyProperty = DependencyProperty.RegisterAttached("IsUpdating", GetType(Boolean), GetType(PasswordHelper))

   Public Shared Sub SetAttach(dp As DependencyObject, value As Boolean)
      dp.SetValue(AttachProperty, value)
   End Sub

   Public Shared Function GetAttach(dp As DependencyObject) As Boolean
      Return CBool(dp.GetValue(AttachProperty))
   End Function

   Public Shared Function GetPassword(dp As DependencyObject) As String
      Return DirectCast(dp.GetValue(PasswordProperty), String)
   End Function

   Public Shared Sub SetPassword(dp As DependencyObject, value As String)
      dp.SetValue(PasswordProperty, value)
   End Sub

   Private Shared Function GetIsUpdating(dp As DependencyObject) As Boolean
      Return CBool(dp.GetValue(IsUpdatingProperty))
   End Function

   Private Shared Sub SetIsUpdating(dp As DependencyObject, value As Boolean)
      dp.SetValue(IsUpdatingProperty, value)
   End Sub

   Private Shared Sub OnPasswordPropertyChanged(sender As System.Windows.DependencyObject, e As System.Windows.DependencyPropertyChangedEventArgs)
      Dim passwordBox As PasswordBox = TryCast(sender, PasswordBox)
      RemoveHandler passwordBox.PasswordChanged, AddressOf PasswordChanged

      If Not CBool(GetIsUpdating(passwordBox)) Then
         passwordBox.Password = DirectCast(e.NewValue, String)
      End If
      AddHandler passwordBox.PasswordChanged, AddressOf PasswordChanged
   End Sub

   Private Shared Sub Attach(sender As DependencyObject, e As DependencyPropertyChangedEventArgs)
      Dim passwordBox As PasswordBox = TryCast(sender, PasswordBox)

      If passwordBox Is Nothing Then
         Return
      End If

      If CBool(e.OldValue) Then
         RemoveHandler passwordBox.PasswordChanged, AddressOf PasswordChanged
      End If

      If CBool(e.NewValue) Then
         AddHandler passwordBox.PasswordChanged, AddressOf PasswordChanged
      End If
   End Sub

   Private Shared Sub PasswordChanged(sender As Object, e As RoutedEventArgs)
      Dim passwordBox As PasswordBox = TryCast(sender, PasswordBox)
      SetIsUpdating(passwordBox, True)
      SetPassword(passwordBox, passwordBox.Password)
      SetIsUpdating(passwordBox, False)
   End Sub

End Class

 

 

'개발 상자 > .NET VB' 카테고리의 다른 글

.NET VB WPF DataGrid Row 숫자 표시  (0) 2023.04.07
휴일 제외 날수 가지고 오기  (0) 2022.07.21