2017-02-27 1 views
0

J'ai créé une application Android qui fonctionne comme prévu. Maintenant, j'ai ajouté le projet UWP comme indiqué sur le site MvvmCross.MvvmCross Binding UWP

Le problème est que la liaison ne fonctionne pas là.

Il est mon 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> 

Et ViewModel

 public string Login { get; set; } 

     public string Password { get; set; } 

     public MvxCommand LoginCommand { get; private set; } 
//... 

Lorsque le bouton de connexion est pressé, il va dans la méthode donnée avec succès, mais Login et Mot de passe Chaîne sont nuls. Le même code fonctionne pour Android avec MvxBind sur les chaînes Login et Password.

Est-ce que je fais quelque chose de fatigué?

+0

Utilisez-vous Fody PropertyChanged? Si tel est le cas, assurez-vous que la vague xml est correcte dans le projet UWP – xleon

+0

Et BTW, si vous ne montrez pas comment vous faites les liaisons, les gens ne seront pas en mesure d'aider beaucoup – xleon

Répondre

-1

En parlant génériquement à WPF, vos propriétés ViewModel doivent implémenter INotifyPropertyChanged dans System.ComponentModel pour que les liaisons mettent à jour l'interface utilisateur. Ajouter ce morceau de code à votre viewmodel et retravailler vos propriétés comme le montre Connexion ci-dessous:

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

Lorsque le bouton de connexion est pressé, il va avec succès dans la méthode donnée, mais Login et Mot de passe Chaîne sont nuls

Dans votre code, je n'ai pas reconnu que vous avez implémenté la propriété Loginsetget. Ni vous avez inclus RaisePropertyChanged(() =>). Vous pouvez donc essayer d'utiliser le code ci-dessous et vérifier si cela fonctionne ou non. En attendant vous pouvez vous référer au project que j'ai téléchargé.

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