我正试图通过xamarin制作一个安卓系统的小程序。我也试图包含一些MVVM.我有一个模型类UserInfoM(有名字,密码,...),我有一个viewmodel "mainpageVM",我想使用该类UserInfoM。我有一个viewmodel "mainpageVM",我想在其中使用该类UserInfoM。 这工作直到某一个阶段。当我在应用程序中输入一些东西时,UserInfoM(odel)的getter和setter会被触发。但我似乎无法在虚拟机中获取数据。这可能会是一些明显的错误,但经过几天的搜索,我似乎找不到答案。
在我的视图(xaml)中,我有绑定到Viewmodel 和
<ContentPage.BindingContext>
<local:MainPageVM/>
</ContentPage.BindingContext>
...
<Entry Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Placeholder="Enter Username"
Text="{Binding UserInfo.User, Mode=TwoWay}"
>
<Entry.BindingContext>
<local:MainPageVM/>
</Entry.BindingContext>
在我的MainPageVM中,使用UserInfoM(odel)作为一个属性。
public UserInfoM UserInfo
{
get { return _userInfo ?? (_userInfo = new UserInfoM()); }
set
{
_userInfo = value;
}
}
在我的UserInfoM(odel)中,我有以下属性(还有其他属性)。
private string user;
public string User
{
get { return user; }
set
{
if (user != value)
{
user = value;
RaisePropertyChanged(nameof(User));
}
}
}
所以xaml绑定似乎是有效的,因为User -property getter和setter是触发的。但是只有在模型中,尽管在视图中绑定被设置为MainPageVM。在MainPageVM中,所有的模型属性都是空的。这一定是某种逻辑错误,我没有得到错误,条目被很好地填写,UserInfoM(odel)中的用户属性被Entry-field填写(设置),但我不能从模型中访问UserInfo.User(或其他)属性。
简而言之,我可以绑定一个单一的属性,但不能从另一个有属性的类中获取一个。我看了一大堆教程,也找了很多,但都找不到这个。任何帮助将是非常感激的.raiseproperty-method实现INotifyPropertyChanged和工作完美的单一属性。在UserInfoM(odel)中的用户属性被更新了,但Viewmodel中的属性却没有更新。
你不需要显式地将BindingContext设置为你的Entry。当你为你的页面设置了绑定上下文时,它就会适用于页面中的所有元素。你对Entry的绑定是正确的,所以它应该变成这样。
<Entry Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Placeholder="Enter Username"
Text="{Binding UserInfo.User, Mode=TwoWay}">
如果你把你的代码替换成这样,Entry将成功地找到它的BindingContext(从页面的BindingContext中),它将在里面寻找UserInfo类,并将UserInfo的User属性绑定到Entry的Text属性。