我目前正在构建基于真实场景的应用程序,以帮助我学习和理解WPF和MVVM。为此,我通过Karl Shifflett的"In The Box" VSIX阅读并完成了工作,并且我能够将大部分概念应用到我正在处理的应用程序中。
虽然我认为MVVM是一种功能强大的设计模式,但它(看似)确实(通常会显示消息,导航,与多个窗口交互),而不是那么简单或直接。现在我的问题/困惑的关键。
我正在处理的WPF应用程序是基于Windows的应用程序,我正在从一组基本要求开始工作:
我习惯在Windows平台上使用MDI应用程序,在父平台上进行交互会导致子窗体打开;我知道MDI不是WPF支持的东西,我从不同的角度来看待开发很好。我的UI仍然以与MDI应用程序类似的方式工作:我有我的应用程序布局,当我与该布局交互时,我的应用程序将通过打开窗口,显示消息等来响应。我(通过MVVM)不清楚如何与多个窗口交互,或者MVVM如何扩展到具有许多窗口/视图的大型应用程序。
我不反对使用像Prism这样的东西,但我没有找到一篇关于Prism如何很好地解决我的特定问题的文章。任何帮助,建议,反馈或其他方式非常感谢!
答案 0 :(得分:0)
您是否尝试过查看nRoute
框架?
可以找到here
链接答案 1 :(得分:0)
实际上有一些关于棱镜的好的tuturials
对于更直接的forrward应用程序(不是非常复杂和模块化),您始终可以创建一个应用程序,其中包含一个管理子用户控件的主窗口(登录窗口,菜单窗口,其他窗口......)
例如,在其中创建一个contentpresenter窗口,并在codebehind:
中public partial class ShellWindow: Window
{
public enum PagesTypes { Login, Home }
PagesTypes currentOpenedPage;
LoginUserControl login;
HomeUserControl home;
public WindowController()
{
InitializeComponent();
login = new LoginUserControl ();
login.GoToPage += new LoginUserControl.ChangePageHandler(GoToPage);
GoToPage(PagesTypes.Login);
}
public void GoToPage(PagesTypes page)
{
switch (page)
{
case PagesTypes.Login:
//Close last opened usercontrol,
....
//open new usercontrol
login = new LoginUserControl();
contentpresenter.content = login;
break;
//other pages cases
....
}
currentOpenedPage = page;
}
}
例如登录usercontrol:
public partial class LoginUserControl : UserControl
{
internal delegate void ChangePageHandler(ShellWindow.PagesTypes toPage);
internal event ChangePageHandler GoToPage;
public LoginUserControl()
{...}
//Methods for login
.....
internal void LoginOK()
{
if(this.GoToPage != null)
GoToPage(ShellWindow.PagesTypes.Home);
}
}
您可以使用此方法更改用户控件,模拟不同的窗口来构建良好的动态。
希望这会给你一些想法。
答案 2 :(得分:0)
如果你真的想要进行MDI,WPF中没有内置任何内容(我认为微软已经决定它现在是一个糟糕的UI模式?),但可能会有第三方控件。任何好的仍将镜像这个解决方案,其MDI容器控件将绑定到子窗口视图模型列表。