xamarin 绑定 class 属性

xamarin binding class property

我正在尝试通过 xamarin 为 android 制作一个小应用程序。我也试图包括一些 MVVM。 我有一个模型 class UserInfoM(带有名称、密码...)。我有一个视图模型 "mainpageVM" ,我想在其中使用 class UserInfoM 。这一直有效到一定程度。当我在应用程序中键入内容时,会触发 UserInfoM(odel) 中的 getter 和 setter。但我似乎无法在 VM 中获取数据。这可能是一些明显的错误,但搜索了几天后,我似乎找不到答案。

在我看来 (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-属性 getter 和 setter。但仅在模型中,尽管在视图中绑定设置为 MainPageVM。在 MainPageVM 中,所有模型属性都为空。它必须是某种逻辑错误,我没有收到错误,条目填写得很好,UserInfoM(odel) 中的 user-属性 由条目字段填写(设置)但是我不能 access/use 来自模型的 UserInfo.User(或其他)属性。

简而言之,我可以绑定一个 属性,但不能绑定另一个 class 的属性。我看了一堆教程并搜索了很多但找不到这个。 我希望解释足够清楚......任何帮助将不胜感激。 raise属性 方法实现了 INotifyPropertyChanged 并且非常适合单个 属性。 de UserInfoM(odel) 中的 user-属性 已更新,但 Viewmodel 中的用户未更新。

您不需要将 BindingContext 显式设置为您的条目。当您为您的页面设置绑定上下文时,它适用于其中的所有元素。你对Entry的绑定是正确的,所以应该变成这样:

<Entry Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Placeholder="Enter Username" 
    Text="{Binding UserInfo.User, Mode=TwoWay}">

如果您像这样替换代码,Entry 将成功找到它的 BindingContext(从页面的 BindingContext),它将在其中查找 UserInfo class 并将绑定 UserInfo 的 User 属性 到条目的文本 属性.