Xamarin 从基本视图模型更新属性

Xamarin 从基本视图模型更新属性,xamarin,mvvm,xamarin.forms,Xamarin,Mvvm,Xamarin.forms,我正在使用Xamarin forms应用程序,我有一个当前页面的ViewModel数据实例,在我的基本ViewModel中反序列化为正确的类型。我的基本视图模型还实现InotifyPropertyChangedInterface。已序列化的视图模型数据包含具有正确数据的属性 我希望它会自动绑定,因为INotifiyPropertyChangedInterface已经实现。但什么也没发生。我还需要做些什么吗?如果您需要任何进一步的信息来帮助我,请询问。除了反序列化json之外,我没有多少代码可以粘

我正在使用Xamarin forms应用程序,我有一个当前页面的ViewModel数据实例,在我的基本ViewModel中反序列化为正确的类型。我的基本视图模型还实现InotifyPropertyChangedInterface。已序列化的视图模型数据包含具有正确数据的属性


我希望它会自动绑定,因为INotifiyPropertyChangedInterface已经实现。但什么也没发生。我还需要做些什么吗?如果您需要任何进一步的信息来帮助我,请询问。除了反序列化json之外,我没有多少代码可以粘贴进去。

您的类应该是这样的:

public class Person : INotifyPropertyChanged
{
    private string nameValue = string.Empty;
    public event PropertyChangedEventHandler PropertyChanged;

    public string Name
    {
        get
        {
            return nameValue;
        }

        set
        {
            if (value != nameValue)
            {
                nameValue = value;
                NotifyPropertyChanged();
            }
        }
    }

    // This method should be called by the Set accessor of each property.
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
public MyPage : ContentPage
{
    public MyPage()
    {
        var person = new Person();
        person.Name = "Bert";

        BindingContext = person;

        person.Name = "Ernie";
    }
}
注意它是如何实现
INotifyPropertyChanged
接口的,并在设置值时调用正确的方法。否则,将导致UI不更新

现在要绑定您的值,请在XAML中,在页面的某个位置执行此操作:
。最后,您必须设置页面的
BindingContext
属性,如下所示:

public class Person : INotifyPropertyChanged
{
    private string nameValue = string.Empty;
    public event PropertyChangedEventHandler PropertyChanged;

    public string Name
    {
        get
        {
            return nameValue;
        }

        set
        {
            if (value != nameValue)
            {
                nameValue = value;
                NotifyPropertyChanged();
            }
        }
    }

    // This method should be called by the Set accessor of each property.
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
public MyPage : ContentPage
{
    public MyPage()
    {
        var person = new Person();
        person.Name = "Bert";

        BindingContext = person;

        person.Name = "Ernie";
    }
}

要获取样板代码并对每个属性调用
PropertyChanged
方法,请查看。

我已经完成了几乎所有的工作,除了我使用Fody来编织属性更改。