xamarin绑定类属性

问题描述 投票:0回答:1

我正试图通过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中的属性却没有更新。

c# xamarin.forms binding derived-class
1个回答
1
投票

你不需要显式地将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属性。

© www.soinside.com 2019 - 2024. All rights reserved.