[英]MvvmCross Binding UWP
我已經創建了按預期工作的 Android 應用程序。 現在我添加了 UWP 項目,如 MvvmCross 站點所示。
問題是綁定在那里不起作用。
有我的 XAML:
<Grid Row="1" >
<StackPanel VerticalAlignment="Center"
Margin="40 0 40 0">
<TextBox Text="{Binding Login}"
Margin="0 0 0 20"/>
<PasswordBox Password="{Binding Password}"/>
</StackPanel>
<Button VerticalAlignment="Bottom"
Content="Login"
Command="{Binding LoginCommand}"
Foreground="#F9F9F9"
HorizontalAlignment="Stretch"
Background="#FF4081"/>
</Grid>
和視圖模型
public string Login { get; set; }
public string Password { get; set; }
public MvxCommand LoginCommand { get; private set; }
//...
當按下登錄按鈕時,它成功進入給定的方法,但登錄和密碼字符串為空。 相同的代碼適用於 Android,在登錄和密碼字符串上使用 MvxBind。
我做點什么嗎?
當按下登錄按鈕時,它成功進入給定的方法,但登錄和密碼字符串為空
在你的代碼中,我沒有意識到你已經實現了Login
屬性set
get
方法。 您都沒有包括RaisePropertyChanged(() => )
。 所以你可以嘗試使用下面的代碼並檢查它是否有效。 同時你可以參考我上傳的項目。
public class MainViewModel : MvxViewModel
{
private string _login;
private string _password;
public string Login
{
get { return _login; }
set { _login = value; RaisePropertyChanged(() => Login); }
}
public string Password
{
get { return _password; }
set { _password = value; RaisePropertyChanged(() => Password); }
}
public ICommand LoginAction
{
get
{
return new MvxCommand(() => ShowViewModel<HomeViewModel>(new {Login,Password}));
}
}
}
我知道這是 4 年前,但對於未來的讀者,在 UWP Passwordbox 中不公開 Password DP 的原因是在內存中有密碼是不安全的。
所以你應該違反 mvvm 並從后面的代碼中將密碼放入數據庫中。 這是一些有用的鏈接:
如何綁定到 MVVM 中的 PasswordBox http://blog.functionalfun.net/2008/06/wpf-passwordbox-and-data-binding.html
此外,如果您堅持公開密碼,您可以創建自己的控件。
一般說到 WPF,您的 ViewModel 屬性需要實現System.ComponentModel
中的INotifyPropertyChanged
,以便綁定更新 UI。 將這段代碼添加到您的視圖模型並重新修改您的屬性,如下面的 Login 所示:
public class ViewModel:INofifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void notifyPropertyChanged(string name)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
private string _login;
public string Login
{
get
{
return _login;
}
set
{
_login = value;
notifyPropertyChanged("Login");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.