WPF 介绍一种在MVVM模式下弹出子窗体的方式
主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来。
WindowManager代码如下:
public static class WindowManager
{
private static Hashtable _RegisterWindow = new Hashtable(); public static void Regiter<T>(string key)
{
_RegisterWindow.Add(key, typeof(T));
}
public static void Regiter(string key, Type t)
{
if (!_RegisterWindow.ContainsKey(key))
_RegisterWindow.Add(key, t);
} public static void Remove(string key)
{
if (_RegisterWindow.ContainsKey(key))
_RegisterWindow.Remove(key);
} public static void ShowDialog(string key, object VM)
{
if (!_RegisterWindow.ContainsKey(key))
{
throw (new Exception("没有注册此键!"));
} var win = (Window)Activator.CreateInstance((Type)_RegisterWindow[key]);
win.DataContext = VM;
win.ShowDialog();
} }
做一个扩展方法,将子窗体注册方法扩展到Window类型的对象上。
public static class WindowExt
{
public static void Register(this Window win, string key)
{
WindowManager.Regiter(key, win.GetType());
} public static void Register(this Window win,string key,Type t)
{
WindowManager.Regiter(key,t);
} public static void Register<T>(this Window win, string key)
{
WindowManager.Regiter<T>(key);
}
}
添加一个ViewModelBase,并在类中添加ShowDialog方法,这样所有继承的ViewModel都有这个方法
public class ViewModelBase
{
public void ShowDialog(string key,object vm)
{
WindowManager.ShowDialog(key,vm);
} public void ShowMessage(string mes,string title="",MessageBoxButton buttons= MessageBoxButton.OK)
{
MessageBox.Show(mes,title,buttons);
}
}
添加一个窗体,并注册子窗体, this.Register<Window1>("Window1");
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
this.Register<Window1>("Window1");
}
}
添加ViewModel,继承自ViewModelBase,并在对应的命令中弹出子窗体Window1
public class MainWindowViewModel:ViewModelBase
{
public MainWindowViewModel()
{
BtnCommand = new DelegateCommand(ExecuteBtn);
} public DelegateCommand BtnCommand { get; set; } private void ExecuteBtn()
{
ShowDialog("Window1",this);
} }
这样子窗体就弹出来了。

WPF 介绍一种在MVVM模式下弹出子窗体的方式的更多相关文章
- WPF 在MVVM模式下弹出子窗体的方式
主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来 ...
- MVVM模式下弹出窗体
原地址:http://www.cnblogs.com/yk250/p/5773425.html 在mvvm模式下弹出窗体,有使用接口模式传入参数new一个对象的,还有的是继承于一个window,然后在 ...
- WPF 利用子线程弹出子窗体的研究
一般来说子线程都是用来处理数据的,主窗体用来实现展现,但是有些时候我们希望子窗体实现等待效果,遮挡主窗体并使主窗体逻辑正常进行,这个业务需求虽然不多,但是正好我们用到了,于是我打算把研究成果写在这了. ...
- WPF TriggerAction弹出子窗体 TargetedTrigger、TargetedTriggerAction用法
namespace TriggerAction { public class OpenWindowAction : TriggerAction<DependencyObject> { pu ...
- wpf mvvm模式下CommandParameter传递多参
原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递多参数,就要稍微处理一下.我暂时还没找到更好的方案,下面介绍的这 ...
- WPF中在MVVM模式下,后台绑定ListCollectionView事件触发问题
问题:WPF中MVVM模式下 ListView绑定ListCollectionView时,CurrentChanged无法触发 解决方案: 初期方案:利用ListView的SelectionChang ...
- WPF实战案例-MVVM模式下在Xaml中弹出窗体
相信很多学习和开发wpf项目的同学都了解过mvvm模式,同样,在mvvm模式下会有一个不可忽视的问题,就是怎么在xaml中弹出窗体,而不破坏MVVM本身的结构. 关于弹出窗体的方式还是很多的,本文先讲 ...
- MVVM模式下WPF动态绑定展示图片
MVVM模式下WPF动态展示图片,界面选择图标,复制到项目中固定目录下面,保存到数据库的是相对路径,再次读取的时候是根据数据库的相对路径去获取项目中绝对路径的图片展示. 首先在ViewModel中 / ...
- WPF MVVM模式下ComboBox级联效果 选择第一项
MVVM模式下做的省市区的级联效果.通过改变ComboBox执行命令改变市,区. 解决主要问题就是默认选中第一项 1.首先要定义一个属性,继承自INotifyPropertyChanged接口.我这里 ...
随机推荐
- 无法嵌入互操作类型"ESRI.ArcGIS.Carto.MapDocumentClass".请改用适用的接口
在对地图文档进行操作时,居然出现如下问题: IMapDocument m_MapDocument = new ESRI.ArcGIS.Carto.MapDocumentClass(); 报错: 无法嵌 ...
- 手机(Android)资源
手机型号 API Android版本 Lenovo A238t API 10 2.3.5 华为 P7 API 19 4.4.2
- android 使用UDP发送数据 DatagramSocket 创建对象为null
DatagramSocket socket=null; try { socket = new DatagramSocket(); //这里创建对象为空 } catch (SocketExceptio ...
- response输出随机图片、定时刷新网页
第一招:利用response向浏览器输出图片: //获取验证码 在<img />标签内的src属性设为请求路径/verifyCode?goodsId=xxx&token=xxxxx ...
- centos6 搭建nginx实现负载均衡
一.安装nginx 1)准备2台服务器,环境一样,同时执行 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.r ...
- 3、iOS Xcode创建protocol(代理).h文件
- 制作centos sshd 镜像
[root@b5926410fe60 /]# yum install passwd openssl openssh-server -y 启动sshd: # /usr/sbin/sshd -D 这时报以 ...
- Jquery中parentsUntil函数调用最容易犯的三个错误
来自 :http://jquery01.diandian.com/post/2012-01-16/14500044 Jquery中parentsUntil函数调用最容易犯的三个错误 Jquery的pa ...
- String拼接
1. String[] members=ArrayDATA_IDS; String usernames = ""; for(String id :members) { userna ...
- win/mac平台搭建ionic开发环境教程(转)
出处:http://www.ionic-china.com/doc/ionic-winmac.html#preface 前言 ionic中文网为大家准备了绿色版的nodejs和androidSDK以及 ...