Ikat PasswordBox dengan selamat dalam mod WPF MVVM: langkah terperinci
Mengikat PasswordBox dalam seni bina MVVM akan menyebabkan isu keselamatan, tetapi kaedah pengikatan yang selamat dan boleh dipercayai boleh dicapai. Teknik biasa digambarkan dalam contoh kod yang disediakan di http://www.wpftutorial.net/PasswordBox.html.
Amalan mengikat Kata Laluan
Mari kita mendalami pelaksanaan teknologi ini. Andaikan bahawa ViewModel mengandungi sifat nama pengguna dan kata laluan. Mengikat nama pengguna ke TextBox adalah sangat mudah, tetapi mengikat kata laluan ke PasswordBox memerlukan sedikit pengubahsuaian.
Menggunakan kod yang disediakan, anda boleh memasukkan PasswordBox dalam XAML:
<code class="language-xml"><passwordbox ff:passwordhelper.attach="True" ff:passwordhelper.password="{Binding Path=Password}" width="130"></passwordbox></code>
Dengan persediaan ini, kod berikut menunjukkan menggunakan sifat Perintah dalam ViewModel:
<code class="language-csharp">private DelegateCommand loginCommand; public string Username { get; set; } public string Password { get; set; } public ICommand LoginCommand { get { if (loginCommand == null) { loginCommand = new DelegateCommand(Login, CanLogin); } return loginCommand; } } private bool CanLogin() { return !string.IsNullOrEmpty(Username); } private void Login() { bool result = securityService.IsValidLogin(Username, Password); }</code>
Langkah tersembunyi?
Walaupun kod di atas memastikan pengikatan, terdapat langkah kritikal dalam pengikatan PasswordBox yang sering diabaikan. Apabila memeriksa XAML, anda akan melihat bahawa pengikatan nama pengguna TextBox berfungsi seperti yang diharapkan, tetapi pengikatan kata laluan PasswordBox tidak mengemas kini sifat ViewModel.
Pembantu Rahsia
Malah, anda menetapkan titik putus dalam kelas pembantu, mengesahkan bahawa kod itu dilaksanakan tetapi gagal mengemas kini sifat Kata Laluan ViewModel. Di sinilah tiada langkah kritikal.
Pengikatan manual
Untuk melengkapkan pelaksanaan, sambungan perlu diwujudkan antara PasswordBox dan ViewModel. Dalam fail di belakang kod, tentukan pengendali untuk acara PasswordChanged PasswordBox:
<code class="language-csharp">private void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e) { if (this.DataContext != null) { ((dynamic)this.DataContext).SecurePassword = ((PasswordBox)sender).SecurePassword; } }</code>
Kaedah keselamatan
Dengan mentakrifkan sifat SecureString dalam ViewModel dan mengendalikan acara PasswordChanged, anda boleh mendapatkan semula nilai kata laluan dengan selamat sambil mengekalkan prinsip MVVM. Pendekatan ini mengelak daripada melanggar garis panduan keselamatan dan mengekalkan pemisahan yang jelas antara Views dan ViewModels.
Atas ialah kandungan terperinci Bagaimana untuk Mengikat PasswordBox dengan selamat ke ViewModel dalam WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!