prism IRegionMemberLifetime(区域成员生命周期)
1 根据《prism basic navigation》创建项目和模块
2 在ModuleA中添加ViewAViewModel并让其实现IRegionMemberLifetime接口,此接口包含一个KeepAlive属性,该属性表示当从该VM对应的视图导航到其他视图时候,是否销毁该视图
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace ModuleA.ViewModels
{public class ViewAViewModel : BindableBase,INavigationAware,IRegionMemberLifetime{public bool KeepAlive => false;public bool IsNavigationTarget(NavigationContext navigationContext){return false;}public void OnNavigatedFrom(NavigationContext navigationContext){}public void OnNavigatedTo(NavigationContext navigationContext){}}
}
3 在ViewModels文件夹中添加ViewBViewModel类,因为IsNavigationTarget的返回为false,所以每次导航到ViewB时候都要新建一个视图
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ModuleA.ViewModels
{public class ViewBViewModel : INavigationAware{public bool IsNavigationTarget(NavigationContext navigationContext){return false;}public void OnNavigatedFrom(NavigationContext navigationContext){}public void OnNavigatedTo(NavigationContext navigationContext){}}
}
4 修改MainWindow界面增加显示视图增加删除的ItemsControl
<Window x:Class="RegionMemberLifetime.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"Title="{Binding Title}" Height="350" Width="525"><DockPanel LastChildFill="True"><StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="5" ><Button Command="{Binding NavigateCommand}" CommandParameter="ViewA" Margin="5">Navigate to View A</Button><Button Command="{Binding NavigateCommand}" CommandParameter="ViewB" Margin="5">Navigate to View B</Button></StackPanel><ItemsControl ItemsSource="{Binding Views}" Margin="5"><ItemsControl.ItemTemplate><DataTemplate><Border Background="LightBlue" Height="50" Width="50" Margin="2"><TextBlock Text="{Binding}" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" /></Border></DataTemplate> </ItemsControl.ItemTemplate></ItemsControl><ContentControl prism:RegionManager.RegionName="ContentRegion" Margin="5" /></DockPanel>
</Window>
5 修改MainWindowViewModel
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Prism.BasicNavigate.ViewModels
{public class MainWindowViewModel:BindableBase{IRegionManager regionManager;private string _title;public string Title{get { return _title; }set { SetProperty(ref _title, value); }}private ObservableCollection<object> _views = new ObservableCollection<object>();public ObservableCollection<object> Views{get { return _views; }set { SetProperty(ref _views, value); }}public DelegateCommand<string> NavigateCommand { get; }public MainWindowViewModel(IRegionManager regionManager){this.regionManager = regionManager;this.regionManager.Regions.CollectionChanged += Regions_CollectionChanged;NavigateCommand = new DelegateCommand<string>(Navigate);}private void Regions_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e){if (e.Action == NotifyCollectionChangedAction.Add){var region = (IRegion)e.NewItems[0];region.Views.CollectionChanged += Views_CollectionChanged;}}private void Views_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e){if (e.Action == NotifyCollectionChangedAction.Add){Views.Add(e.NewItems[0].GetType().Name);}else if (e.Action == NotifyCollectionChangedAction.Remove){Views.Remove(e.OldItems[0].GetType().Name);}}private void Navigate(string navigatePath){if (navigatePath!=""){regionManager.RequestNavigate("ContentRegion", navigatePath,NavigateCallBack);}}private void NavigateCallBack(NavigationResult result){Console.WriteLine($"Navigate to {result.Context.Uri} completed");}}
}
prism IRegionMemberLifetime(区域成员生命周期)相关推荐
- C++ 作用域与生命周期
Pascal 之父 Nicklaus Wirth 曾经提出一个公式展示出了程序的本质:程序=算法+数据结构.后人又给出一个公式与之遥相呼应:软件=程序+文档.这两个公式可以简洁明了地为我们展示程序和软 ...
- 数据类型,生命周期作用域
目录 数据类型: 生命周期&作用域: 数据类型: 在C语言中,数据类型一共有char(字符型).short(短整型).int(整型).long(长整型). long long(更长的整型).f ...
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期-03
目录 本博客环境 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pyc ...
- 【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
开始前,请先完成首页的开发,详见 [微信小程序-原生开发]实用教程05-首页(含自定义调试模式.插入图片.图文排版.底部留白.添加本地图片) https://blog.csdn.net/weixin_ ...
- java成员属性生命周期,Spring注解 - 生命周期、属性赋值、自动装配
一.Bean的生命周期 流程 Bean创建 -- 初始化 -- 销毁 创建: 单实例:在容器启动时创建对象 多实例:每次调用时创建对象 初始化: 都是在对象创建完成后,调用初始化方法 销毁: 单实例: ...
- 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )
文章目录 一. 博客相关资料 及 下载地址 1. 代码查看方法 ( ① 直接获取代码 | ② JAR 包替换 ) 2. 本博客涉及到的源码查看说明 二. Activity 生命周期回调机制 1. An ...
- java对象生命周期_Java对象生命周期和类生命周期
原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...
- 多线程——线程的生命周期
线程状态: 与人有生老病死一样,线程也同样要经历新建.就绪.运行(活动).阻塞和死亡五种不同的状态.这五种状态 都可以通过Thread类中的方法进行控制.创建并运行线程: ① 新建状态(New Thr ...
- Java中的垃圾回收与对象生命周期
转载自 Java中的垃圾回收与对象生命周期 1. 垃圾回收 垃圾回收是Java程序设计中内存管理的核心概念,JVM的内存管理机制被称为垃圾回收机制. 一个对象创建后被放置在JVM的堆内存中,当永远 ...
最新文章
- ST-GCN 实现人体姿态行为分类
- linux POSIX 信号集,读书笔记:第10章 Posix信号量 (6)
- 梅宏院士:软件定义的未来——万物皆可互联,一切均可编程 | CNCC 2017
- android阿里聚安全黑盒,阿里安全开放平台-阿里聚安全
- CLR查找和加载程序集的方式(二) 流程图
- Autosys command
- 使用C#实现Windows下无焦点窗体
- [转]C# WInForm 无框窗体移动
- 泛型型协变逆变_Java泛型类型简介:协变和逆变
- 从零学javascript_我刚刚问了23,000个开发人员他们对JavaScript的看法。 这是我学到的。...
- Python案例:给出三角形构成方案
- iOS开发那些事-iOS6苹果地图有用开发
- TOMCAT JNDI RESOUCE
- Web渗透测试实战——(2.1)Metasploit 6.0初步
- 发现一款牛逼的 IDEA 插件:检测代码漏洞,一键修复!
- xshell上传文件到linux很慢,XShell上传文件到Linux服务器上
- 22-09-20 西安 谷粒商城(04)Redisson做分布式锁、布隆过滤器、AOP赋能、自定义注解做缓存管理、秒杀测试
- 华为云ECS服务器中通过docker部署ELK-kibana
- Mac创建txt文件的两种方法
- C语言中sort函数的用处
热门文章
- Java代码安装maven jar_maven安装本地jar到本地仓库(引入第三方jar, maven打包提示程序包不存在)...
- go并发之道学习总结
- 中关村2019逆向 Reverse lebel:控制流平坦化 / python字节码分析
- STM32H743开发板移植micropython并外扩32M的SQPI flash和32M的SDRAM
- CSS基础:text-overflow:ellipsis溢出文本显示省略号的详细方法_CSS教程
- 弦线上的波动方程推导
- 阿里巴巴战略投资康佳旗下易平方和KKTV ,加速抢占大屏新赛道...
- 多传感器融合定位六-惯性导航原理及误差分析
- 陈松松:经验告诉我们,做视频营销这11条标准一条也不能缺
- TalkingData首席金融行业专家鲍忠铁:18亿数据解读移动互联网