我开始在我的应用程序中实现 MVVM 并且遇到了知道用户何时导航到视图的问题。
要在视图之间导航,我可以使用navigationService.Navigate(...);
如何检查何时导航到视图?我可以使用该活动navigationService.Navigated
吗?
有没有其他方法可以使用,例如页面本身提供的 OnNavigatedTo?
我开始在我的应用程序中实现 MVVM 并且遇到了知道用户何时导航到视图的问题。
要在视图之间导航,我可以使用navigationService.Navigate(...);
如何检查何时导航到视图?我可以使用该活动navigationService.Navigated
吗?
有没有其他方法可以使用,例如页面本身提供的 OnNavigatedTo?
如果这个问题仍然存在,我更喜欢这个解决方案:http ://www.geoffhudik.com/tech/2010/10/10/another-wp7-navigation-approach-with-mvvm.html
如果使用它,可以从发送方 ViewModel 发送接收方 ViewModel 的参数:
SendNavigationMessage(Settings.NAVIGATION_PRODUCTS_SUBCATEGORIES,
new Dictionary<string, object> { { "SelectedIndex", Int32.Parse(item.id) } });
并且接收者应该在 xaml 中定义:
NavigatedToCommand="{Binding RefreshCommand}"
然后在接收者 ViewModel 中:
public ICommand RefreshCommand // Should be set as NavigatedToCommand="{Binding RefreshCommand}" in xaml
{
get { return new RelayCommand(Refresh); }
}
public void Refresh()
{
_dataService.GetList(SelectedIndex, DownloadedCallback); // So, this would be called automatically after navigating is complete. SelectedIndex is updated at this moment.
}
XAML:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP71"
xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
DataContext="{Binding titleSearchViewModel, Source={StaticResource Locator}}">
<i:Interaction.Triggers>
<i:EventTrigger>
<cmd:EventToCommand Command="{Binding PageLoaded, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
虚拟机:
private RelayCommand _PageLoaded;
public RelayCommand PageLoaded
{
get
{
if (_PageLoaded == null)
{
_PageLoaded = new RelayCommand(
() => Loaded()
);
}
return _PageLoaded;
}
}
感谢您提供的答案。在我决定创建一个由少数人创建的导航服务的自定义实现之前,两者都非常有用。然后我为 Cimbalino 工具包做出了贡献来建议这一点,并且它已经被引入了一段时间。
我的个人意见,这最好地解决了我的问题。看看那里的导航服务。导航事件几乎解决了我遇到的问题。
https://github.com/Cimbalino/Cimbalino-Toolkit
它基本上归结为(在您的视图模型中):
_navigationService.Navigated += OnNavigated;