如何在页面中刷新ViewModel

本文关键字:刷新 ViewModel | 更新日期: 2023-09-27 17:50:49

我引用了一些示例代码,这些代码查询设备连接并返回有关设备当前如何连接到网络的数据。我需要在几个页面的OnNavigatedTo事件中确定设备的当前连接模式。当页面导航到。

时,我遇到了获取数据刷新的ViewModel的麻烦。

MainPage.xaml.cs

public MainPage()
    {
        InitializeComponent();
        //DataContext = App.DeviceInformationViewModel.InformationProvider;
    }
protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        DataContext = null;
        DataContext = App.DeviceInformationViewModel.InformationProvider;
    }

App.xaml.cs

private static DeviceInformationViewModel deviceInformationViewModel = null;
public static DeviceInformationViewModel DeviceInformationViewModel
    {
        get
        {
            // Delay creation of the view model until necessary
            if (deviceInformationViewModel == null)
                deviceInformationViewModel = new DeviceInformationViewModel();
            return deviceInformationViewModel;
        }
    }

DeviceInformationViewModel.cs

private static IInformationProvider informationProvider;
    /// <summary>
    /// Returns the device information to display.
    /// </summary>
    public IInformationProvider InformationProvider
    {
        get
        {
            if (informationProvider == null)
            {
                if (DesignerProperties.IsInDesignTool)
                {
                    informationProvider = new FakeInformation();
                }
                else
                {
                    informationProvider = new RealInformation();
                }
            }
            return informationProvider;
        }
    }

IInformationProvider继续提供一个接口,通过该接口可以检索设备网络信息。如果需要的话,我也可以添加这些类,它们都很短。您建议我如何更新我的解决方案,以便每次MainPage导航到ViewModel时都可以刷新,并且我可以使用正确的信息更新我的视图?

如何在页面中刷新ViewModel

强制绑定检查更新值的典型方法是引发属性更改通知:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    App.DeviceInformationViewModel.RefreshProperty("InformationProvider");
}

假设您已经在DeviceInformationViewModel中实现了INotifyPropertyChanged,您可以在该VM中添加此方法:

public void RefreshProperty(string propertyName)
{
    NotifyPropertyChanged(propertyName);
}

通过触发InformationProvider属性的属性更改通知,所有绑定到该属性的视图将被通知刷新显示的值。