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 |