2017-02-27 178 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})); 
     } 
    } 
}