How to Refresh the Bindings on HomePageViewModel when some data has been changed in Navigated Page2

眉间皱痕 提交于 2021-01-29 11:29:47

问题


I have some property which I am using from Page2 in HomePageViewModel, When I navigate to Page2 I have changed that property and on coming back by doing NavigiationPop.

HomePage is not re-loaded/ refreshed at all as I have set the BindingContext in the constructor of HomePage, which is loaded only once.

The solution which is working for me is Setting the BindingContext to the ViewModel on "onAppearing()", usually its not consider the best practice. But I also need to refresh the values which I have changed on Page2.

Looking forward for your valuable inputs and suggestions.

Also Pros/Cons of Setting the BindingContext in OnAppearing.

Thanks,

Hemant


回答1:


It depends on you, they all can achieve the effect.

However if you want to reduce the CPU consumption of the program, then don't use the onAppearing method too much to refresh the page data.

Another method is that you can change the data of the model through Delegate/Event/MessageCenter.

You can refer to this discussion to know how to use Delegate/Event/MessageCenter.

Here I will give the sample by using MessageCenter to achieve that.

For example, the TestViewModel as follows:

public class TestViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    private string pagetitle;
    public string PageTitle
    {
        get
        {
            return pagetitle;
        }
        set
        {
            if (pagetitle != value)
            {
                pagetitle = value;
                NotifyPropertyChanged();
            }
        }
    }

}

Then bind it in FirstPage as follows, and Subscribe MessageCenter inside it:

TestViewModel testViewModel = new TestViewModel();
BindingContext = testViewModel;

MessagingCenter.Subscribe<object>(this, "Hi", (sender) =>
{
    // Do something whenever the "Hi" message is received
    testViewModel.PageTitle = "Modified  Title";
});

Then in the SecondPage, when changing the data by sending message. When back to FirstPage, the View Will be updated.

private void Button_Clicked(object sender, EventArgs e)
{
    MessagingCenter.Send<object>(this, "Hi");
}


来源:https://stackoverflow.com/questions/65553411/how-to-refresh-the-bindings-on-homepageviewmodel-when-some-data-has-been-changed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!