Prism导航
通常,导航意味着某个Control被添加到UI中,与此同时另一个Control被移除。简单跳转
[*]新建 UserControl,新建ViewModel,VM需要实现 INavigationAware
[*]注册 UserControl到DryIoc容器
containerRegistry.RegisterForNavigation<IndexView, IndexViewModel>();
[*]在XAML中需要导航的地方声明Region
[*]在需要导航的地方(VM或后置代码中)注入 IRegionManager 并请求导航(关于 Prism 中的Region 可见我的另一篇随笔)
public DelegateCommand<string> NavigateCommand { get; private set; }
public MainWindowViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string navigatePath)
{
if (navigatePath != null)
_regionManager.RequestNavigate("ContentRegion", navigatePath);
}导航后执行回调
请求导航时可以添加一个回调方法用于导航成功后被使用
void RequestNavigate(
string regionName,
string source,
Action<NavigationResult> navigationCallback
);一个例子:
private void Navigate(string navigatePath)
{
if (navigatePath != null)
_regionManager.RequestNavigate("ContentRegion", navigatePath, NavigationComplete);
}
private void NavigationComplete(NavigationResult result)
{
System.Windows.MessageBox.Show(String.Format("Navigation to {0} complete. ", result.Context.Uri));
}被导航视图的复用
每个能够被导航的视图的VM都需要实现 INavigationAware 接口,接口中有一个 IsNavigationTarget 方法,它用于表明当前视图是否可以被导航复用,如果直接返回 true,那么导航时将总是使用同一个实例。
也可以根据条件返回 false 以使用新的VM实例。
被导航视图的生命周期
当导航到新的视图之后, 之前的视图就成了deactive状态。
可以通过实现 IRegionMemberLifetime 并重写 KeepAlive 的 get 方法来自定义什么情况下销毁页面,使每次页面处于 deactivated 状态时 ViewModel 对象被销毁,再次导航到被销毁页面后重新创建新 ViewModel 对象。
public class ViewBViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
public bool KeepAlive => false;
// ...导航时携带参数
private void PersonSelected(Person person)
{
var parameters = new NavigationParameters();
parameters.Add("person", person);
if (person != null)
_regionManager.RequestNavigate("PersonDetailsRegion", "PersonDetail", parameters);
}public void OnNavigatedTo(NavigationContext navigationContext)
{
var person = navigationContext.Parameters["person"] as Person;
if (person != null)
SelectedPerson = person;
}TabControl与Prism导航
在 TabControl 中声明 RegionName ,在导航时会自动添加 TabPage。
https://img2023.cnblogs.com/blog/3217284/202306/3217284-20230625140024325-245667245.png
引用
[*]Prism Library: Navigation Using the Prism Library
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]