2011-03-09 63 views
2

我只是开始了整个WPF的事情,并且需要了解一些基本元素。我到目前为止,我没有在MVVM模式中发现Model,View和ViewModel。如何更改视图+基于命令的视图模型

我没有得到的是在哪里/如何去改变我的UI基于此。

可以说我有一个应用程序,我需要先登录。我的登录是一个视图和我有一个viewmodel +模型。显示这一个没有问题,因为它的“启动”视图我只是将它添加到我的窗口的构造函数中(对错)。当用户成功登录后,我想将视图和视图模型更改为例如。仪表板视图+视图模型。我应该手动完成所有这些工作,只需删除登录的用户控件,然后添加其他用户控件即仪表板?然后更改datacontext?这通常如何完成?

我担心的是,我只是简单地引入了很多代码来切换view + viewmodel,这让我有点困扰。什么时候我从仪表板到客户列表,然后到项目列表等我做这个逻辑在我的eventhandler /命令中按下按钮?

回答

2
  • 认为是UI(可能是一个窗口,网页,用户控件)
  • 视图模型是后端到该视图

你的登录窗口将有自己的视图模型您的仪表板将拥有自己的视图模型。您不要手动切换视图模型。

因此,用户输入他/她的用户名和密码并点击回车,登录视图模型通过视图中的绑定获取数据,然后模型验证凭据,如果他们是正确的,那么仪表板出现哪个绑定其视图模型。

您有一个登录视图和视图模型+仪表板视图和查看模型+其他视图和查看其他控件的模型。

- 更新:

比方说,你具备以下条件: - 窗口 - 登录控制 - 仪表板控制

所有有自己的看法(V)和视图模型(VM) 的Window VM具有两个可见性属性,Window V中的Login和Dashboard可见性属性绑定到它们。

当应用程序启动时,Login控件可见,当登录成功时,模型会通知Window VM将Login visibility属性设置为折叠状态,并将Dashboard visible属性设置为visible,然后Window VM会告诉Window V隐藏登录控件并显示仪表板控件。 “告诉”意思是引发事件,发送消息,调用方法 - 取决于你如何实现MVVM。

+0

[quote]“如果他们是正确的,那么仪表板就会出现,它绑定到它的视图模型。” [/ quote] - 这个怎么做是我试图理解的。如何从一个视图+视图模型切换到另一个视图? – 2011-03-09 21:47:17

1

创建包含用户控件和框架的MainPageView。将MainPageView设置为您的根视觉效果。然后,您可以将Frame Source绑定到MainPageViewModel中的一个属性。然后,在登录或仪表板之间进行导航就是将消息发送到MainPageViewModel并设置帧源绑定的属性。

0

如果您希望您的视图位于另一个窗口中,那么您可以简单地在每个窗口(单独的XAML)中创建视图/视图模型,并通过创建新窗口,使其可见,然后退出前一个窗口。

但是,如果您想在同一个窗口中切换视图,那么我建议您使用自定义的ContentPresenter。我曾就此问过类似的问题,你可以在这里找到:Resource management when changing window content

如果您只是简单地切换可见性,那么您将持有所有视图的加载资源。使用自定义的ContentPresenter,您可以换出当前的内容,并且旧内容将被垃圾收集器拾取。一个命令将被发送并由视图模型拾取,这将改变当前视图字段(这是视图模型中的一个字段)。 ContentPresenter将对视图模型的字段具有绑定,并在View Model接收到该命令时自动切换其内容。

相关问题