2017-10-28 127 views
0

我是MvvmCross的新手,我有一個關於Android綁定的問題。我可以綁定到單個屬性,但無法將數據綁定到對象。不知道我做錯了,但在這裏它是:MvvmCross對象數據綁定

模型類:

public class Login : MvxNotifyPropertyChanged 
{ 
    private string _email; 

    public string Email 
    { 
     get { return _email; } 
     set 
     { 
      SetProperty(ref _email, value); 
     } 
    } 

    public string Password { get; set; } 
} 

查看的片段模型類:

public class LoginOptionViewModel: MvxViewModel 
{ 

    private readonly IMvxNavigationService _navigationService; 

    public LoginOptionViewModel(IMvxNavigationService navigationService) 
    { 
     _navigationService = navigationService; 

     LoginCommand = 
      new MvxAsyncCommand(async() => await _navigationService.Navigate<RegistrationViewModel>()); 

    } 

    public IMvxAsyncCommand LoginCommand { get; set; } 

    private Login _loginInfo; 

    public Login LoginInfo 
    { 
     get 
     { 
      return _loginInfo ?? new Login(); 
     } 
     set 
     { 
      _loginInfo = value; 
      RaisePropertyChanged(() => LoginInfo); 
     } 
    } 

} 

的Android的片段Axml:

<EditText 
       android:id="@+id/loginEmailTxt" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/EmailHint" 
       android:textColor="@color/darkNavy" 
       android:inputType="textEmailAddress" 
       local:MvxBind="Text LoginInfo.Email" /> 

我哪裏錯了,我已經放置了一個斷點,但沒有看到它被擊中。這綁定到EditText,但沒有任何事情發生。我是否錯過或做錯了爲了綁定到對象屬性?

回答

1

MvvmCross對象數據綁定

你可以實現MvxNotifyPropertyChanged接口,因此該系統可以通知客戶端某個屬性值已更改。

修改你的對象:

MainViewModel

private Login _login; 
public Login Login 
{ 
    get 
    { 
     return _login ?? new Login() { Email = "=-="}; 
    } 
    set 
    { 
     _login = value; 
     RaisePropertyChanged(() => Login); 
    } 
} 

axml然後使用它:

local:MvxBind="Text Login.Email" 

它工作在我身邊的罰款。

更新:

我不能重現你的問題,但這裏是我完整的代碼,希望這可以幫助你:

public class MainViewModel : MvxViewModel 
{ 
    public MainViewModel() 
    { 
    } 

    public override Task Initialize() 
    { 
     return base.Initialize(); 
    } 

    public IMvxCommand ResetTextCommand => new MvxCommand(ResetText); 
    private void ResetText() 
    { 
     Text = "Hello MvvmCross"; 
    } 

    private string _text = "Hello MvvmCross"; 
    public string Text 
    { 
     get { return _text; } 
     set { SetProperty(ref _text, value); } 
    } 

    private Login _login; 
    public Login Login 
    { 
     get 
     { 
      return _login ?? new Login() { Email = "=-="}; 
     } 
     set 
     { 
      _login = value; 
      RaisePropertyChanged(() => Login); 
     } 
    } 
} 

public class Login : MvxNotifyPropertyChanged 
{ 
    private string _email; 
    public string Email 
    { 
     get => _email; 
     set => SetProperty(ref _email, value); 
    } 
} 

Effect

+0

嗨,感謝您的反饋,我已經完成了您提到的內容,但仍然無法正常工作?提及我對模型有單獨的解決方案有幫助嗎?如果我設置一個像你這樣的屬性的電子郵件=「= - =」它也打破了應用程序出於某種原因。 –

+0

@helloworld,我有更新我的答案,你可以檢查它。 –

+0

我有一種感覺,因爲它無法持有MVVM的相同參考的單獨解決方案。我認爲不適合將域名放入同一個解決方案,並且最有可能工作 –