0

我有一些从 HomePageViewModel 中的 Page2 使用的属性,当我导航到 Page2 时,我更改了该属性并通过执行 NavigiationPop 返回。

HomePage 根本没有重新加载/刷新,因为我在 HomePage 的构造函数中设置了 BindingContext,它只加载一次。

对我有用的解决方案是将 BindingContext 设置为“onAppearing()”上的 ViewModel,通常它不考虑最佳实践。但我还需要刷新我在 Page2 上更改的值。

期待您的宝贵意见和建议。

还有在 OnAppearing 中设置 BindingContext 的优缺点。

谢谢,

赫曼

4

1 回答 1

0

这取决于你,他们都可以达到效果。

但是如果要减少程序的CPU消耗,那么onAppearing刷新页面数据的方法就不要使用太多了。

另一种方法是可以通过Delegate / Event / MessageCenter更改模型的数据。

您可以参考此讨论以了解如何使用Delegate/Event/MessageCenter

在这里,我将通过使用MessageCenter来实现该示例。

例如,TestViewModel如下:

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

}

然后在FirstPage中绑定如下,在里面订阅MessageCenter:

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

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

然后在SecondPage 中,通过发送消息更改数据时。返回FirstPage时,视图将被更新。

private void Button_Clicked(object sender, EventArgs e)
{
    MessagingCenter.Send<object>(this, "Hi");
}
于 2021-01-04T08:31:35.713 回答