Kolumne XAML Expertise: WPF und Windows-Apps

XAML-Tipp: WPF – Data Binding auf das PasswordBox-Steuerelement
1 Kommentar

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger nun schon seit fünf Jahren Top-How-tos zum Thema XAML. Einsteiger und fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „WPF: Data Binding auf das PasswordBox-Steuerelement“.

Ein Data Binding bei Steuerelementen ist unter XAML extrem einfach. Eine Ausnahme hierbei gibt es beim PasswordBox-Steuerelement. Hier kann man nicht wie üblich auf die Text-Property ein Data Binding setzen. Das liegt daran, dass jedes Binding im Memory behandelt wird. Der Cracker könnte sonst mit einfachen Mitteln an das eingegebene Passwort gelangen. Aus diesen Gründen hat Microsoft das Standard-Data-Binding für die Password-Property bewusst ausgelassen. Man müsste entsprechend über die Code-Behind-Datei darauf zugreifen, was aus Architektursicht kein Hochgenuss sein dürfte.

WPF: Data Binding auf das PasswordBox-Steuerelement

Eine bessere Lösung ist das Verwenden von Behaviors. Diese wurden bereits ein einer XAML-Expertise-Folge vorgestellt (Data Binding auf Events). Der große Vorteil: Behaviors geben eine Instanz zum aktuellen Sender mit. So kann ohne Probleme auf die Password-Property vom ViewModel aus zugegriffen werden.

Als Beispiel wird eine WPF-Anwendung mit einem PasswordBox– und Button-Steuerelement angelegt, dazu ein ViewModel erzeugt und mit Expression Blend das CallMethodAction-Behavior über beide Steuerelemente gesetzt. Als EventTrigger wird beim Password-Steuerelement auf das PasswordChanged-Event gesetzt, sodass bei der Eingabe des Passworts die nötigen Infos ans ViewModel überreicht werden. Beim Button wird wie gewohnt auf das Clickevent getriggert. Wird der Button geklickt, soll das Passwort dazu in einer MessageBox angezeigt werden. In Listing 1 und 2 wird die einfache Implementierung dazu gezeigt.

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wpfPasswordBinding="clr-namespace:WpfPasswordBinding"
Title="MainWindow"
Width="525"
Height="350"
mc:Ignorable="d">
<Window.Resources>
<wpfPasswordBinding:MainWindowViewModel x:Key="ViewModel" />
</Window.Resources>
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center"
DataContext="{StaticResource ViewModel}"
Orientation="Horizontal">
<PasswordBox Width="200" Height="25">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PasswordChanged">
<ei:CallMethodAction MethodName="PasswordChanged" TargetObject="{Binding Mode=OneWay}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</PasswordBox>
<Button
Width="75"
Height="25"
Content="OK">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="SayPassword" TargetObject="{Binding Mode=OneWay}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Window>
public class MainWindowViewModel
{
private string _password;

public void PasswordChanged(object sender, RoutedEventArgs routedEventArgs)
{
var passwordBox = (PasswordBox)sender;
_password = passwordBox.Password;
}

public void SayPassword()
{
MessageBox.Show("Your Password: " + _password);
}
}
...

Abb. 1: Data Binding durch ein CallMethodAction Behavior mit dem PasswordBox-Steuerelement

Windows Developer

Windows DeveloperDieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.

Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. Außerdem ist der Windows Developer weiterhin als Print-Magazin im Abonnement erhältlich.

 

BASTA! 2021

Keynote: Auf dem Weg zu „One .NET“ – das eine Framework, sie alle zu beherrschen

mit Dr. Holger Schwichtenberg (www.IT-Visions.de/MAXIMAGO GmbH)

C#-Workshop – was kommt Neues in .NET 5?

mit Rainer Stropek (timecockpit.com)

IT Security Summit 2020

Zero Trust – why are we having this conversation?

mit Victoria Almazova (Microsoft)

Digitaler Ersthelfer

mit Martin Wundram (DigiTrace GmbH)

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
1 Kommentar
Inline Feedbacks
View all comments
Nikita Prorekhin

Hallo zusammen,

falls ihr Probleme mit dem CallMethodAction-Property habt, hier gibt es die Lösung – https://stackoverflow.com/a/60563707

Man muss das Microsoft.Xaml.Behaviors.Wpf NuGet Package installieren und den xmln Namespace ändern ( http://schemas.microsoft.com/xaml/behaviors )

Mehr Info – https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/

X
- Gib Deinen Standort ein -
- or -