2017-02-27 107 views
0

我已经创建了Android应用程序,它按预期工作。现在我添加了UvP Project,如MvvmCross站点所示。MvvmCross绑定UWP

问题是绑定在那里不起作用。

还有就是我的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; } 
//... 

当按下登录按钮,它成功地进入给定的方法,但登录名和密码字符串为空。使用MvxBind登录和密码字符串时,相同的代码适用于Android。

我会做一些工作吗?

+0

您使用的是Fody PropertyChanged吗?如果是这样的话,请确保UWP项目中的wave xml是正确的 – xleon

+0

顺便说一句,如果你不显示你是如何绑定的,那么人们将无法提供帮助 – xleon

回答

-1

一般来说,对于WPF,您的ViewModel属性需要实现System.ComponentModel中的INotifyPropertyChanged,以便绑定更新UI。这段代码添加到您的视图模型和如下图所示的登录返工您的属性:

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"); 
     } 
    } 
} 
0

当按下登录按钮,它成功地进入给定的方法,但登录名和密码字符串为空

在你的代码中,我并没有意识到你已经执行Login属性setget方法。您没有包括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})); 
     } 
    } 
}