MvvmCross对象数据绑定

问题描述:

我是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,但没有任何事情发生。我是否错过或做错了为了绑定到对象属性?

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的相同参考的单独解决方案。我认为不适合将域名放入同一个解决方案,并且最有可能工作 –