如何刷新页面中的ViewModel

时间:2014-03-19 02:42:10

标签: c# mvvm windows-phone-8

我正在引用一些查询设备连接的示例代码,并返回有关设备当前如何连接到网络的数据。我需要在几页的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时都可以刷新,我可以使用正确的信息更新我的视图?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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