如何在页面中刷新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时都可以刷新,并且我可以使用正确的信息更新我的视图?
强制绑定检查更新值的典型方法是引发属性更改通知:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
App.DeviceInformationViewModel.RefreshProperty("InformationProvider");
}
假设您已经在DeviceInformationViewModel
中实现了INotifyPropertyChanged
,您可以在该VM中添加此方法:
public void RefreshProperty(string propertyName)
{
NotifyPropertyChanged(propertyName);
}
通过触发InformationProvider
属性的属性更改通知,所有绑定到该属性的视图将被通知刷新显示的值。