从Base ViewModel更新属性

时间:2018-06-13 02:12:43

标签: xamarin mvvm xamarin.forms

我正在开发Xamarin表单应用程序,我的当前页面的ViewModel数据实例在我的Base ViewModel中反序列化为正确的类型。 My Base ViewModel还实现了INotifiyPropertyChangedInterface。已序列化的视图模型数据包含具有正确数据的属性。

由于实现了INotifiyPropertyChangedInterface,我希望它能自动绑定。但没有任何反应。我还需要做进一步的事吗?如果您需要任何进一步的信息来帮助我,请询问。除了反序列化json之外,我可以粘贴的代码不多。

1 个答案:

答案 0 :(得分:0)

你的课应该是这样的:

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));
        }
    }
}

注意它是如何实现INotifyPropertyChanged接口的,并在设置值时调用正确的方法。如果不这样做,将导致UI无法更新。

现在要绑定您的值,请在页面上的某个位置的XAML中执行此操作:<Label Text="{Binding Name}" />。最后,您必须设置页面的BindingContext属性,如下所示:

public MyPage : ContentPage
{
    public MyPage()
    {
        var person = new Person();
        person.Name = "Bert";

        BindingContext = person;

        person.Name = "Ernie";
    }
}

要取出样板代码并在每个属性上调用PropertyChanged方法,请查看PropertyChanged.Fody plugin