我创建的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>
和ViewModel
public string Login { get; set; }
public string Password { get; set; }
public MvxCommand LoginCommand { get; private set; }
//...
按下“登录”按钮后,它会成功进入给定方法,但“登录”和“密码”字符串为空。相同的代码适用于Android,在登录名和密码字符串上使用MvxBind。
我能做些什么吗?
答案 0 :(得分:0)
按下Login按钮后,它会成功进入给定方法,但Login和Password字符串为空
在您的代码中,我无法识别您已实施Login
属性set
get
方法。你们都没有包括RaisePropertyChanged(() => )
。所以你可以尝试使用下面的代码并检查它是否有效。在此期间,您可以参考我上传的project。
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}));
}
}
}
答案 1 :(得分:0)
我知道这是 4 年前,但对于未来的读者,在 UWP Passwordbox 中不公开 Password DP 的原因是在内存中有密码是不安全的。
所以你应该违反 mvvm 并从后面的代码中将密码放入数据库中。 这里有一些有用的链接:
How to bind to a PasswordBox in MVVM http://blog.functionalfun.net/2008/06/wpf-passwordbox-and-data-binding.html
此外,如果您坚持公开密码,您可以创建自己的控件。
答案 2 :(得分:-1)
一般说到WPF,您的ViewModel属性需要实现INotifyPropertyChanged
中的System.ComponentModel
,以便绑定更新UI。将这段代码添加到您的viewmodel并重新修改您的属性,如下面的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");
}
}
}