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);
}
}
嗨,感谢您的反馈,我已经完成了您提到的内容,但仍然无法正常工作?提及我对模型有单独的解决方案有帮助吗?如果我设置一个像你这样的属性的电子邮件=“= - =”它也打破了应用程序出于某种原因。 –
@helloworld,我有更新我的答案,你可以检查它。 –
我有一种感觉,因为它无法持有MVVM的相同参考的单独解决方案。我认为不适合将域名放入同一个解决方案,并且最有可能工作 –