Przeczytałem kilka artykułów o tym, jak używać Attached Properties do wiązania wartości PasswordBox w WPF. Jednak każdy artykuł odwołuje się również do dokumentacji .NET, która wyjaśnia, dlaczego PasswordBox nie został w ogóle stworzony jako bindable.Używanie PasswordBox z WPF - MVVM
Nie uważam się w żaden sposób za eksperta od zabezpieczeń, ale sądzę, że ktoś w firmie Microsoft wiedział, co robią, i nie powinienem wysilać się, próbując go cofnąć.
Zamiast tego wpadłem na własne rozwiązanie.
public class LoginViewModel
{
// other properties here
public PasswordBox Password
{
get { return m_passwordBox; }
}
// Executed when the Login button is clicked.
private void LoginExecute()
{
var password = Password.SecurePassword;
// do more stuff...
}
}
Następnie w moim XAML, po prostu uczynić PasswordBox poprzez wiązanie pole Hasło do ContentPresenter
.
Moje pytanie brzmi: czy jest jakiś problem z robieniem tego w ten sposób? Zdaję sobie sprawę, że w pewien sposób przełamuję MVVM, pozwalając, by rzeczywiste formanty pojawiły się w moim ViewModelu, ale przynajmniej wydaje się to bardziej poprawne niż po prostu odblokowanie pola hasła.
Jeśli to jest rzeczywiście problem, czy ktoś ma rozwiązanie, które nie wymaga użycia Załączonych właściwości i przechowywania hasła w ViewModel?
Dzięki! -J
Na czym polega problem z załączonym podejściem do nieruchomości? Czy typ własności to ciąg? Dlaczego nie zrobić SecureString? –
Tak jak powiedziałem powyżej, po prostu wydawało się, że był powód, dla którego nie był to DependencyProperty, więc znalezienie sposobu na obejście problemu wydawało się niewłaściwym podejściem. Przypuszczam, że mógłbym równie łatwo "związać" się z właściwością SecurePassword. – jeremyalan
Problem, gdy właściwość Hasło można powiązać, to: wartość jest łatwo śledzona przez oprogramowanie zewnętrzne. takie jak SNOOP. jak łatwo ukraść twoje hasło. – ktutnik