c#MVVM表示逻辑

时间:2013-03-24 20:53:27

标签: c# wpf xaml mvvm

我是MVVM模式的新手。

该视图有一个登录按钮和一个进度条。

我有一个名为LoginViewModel的视图模型,它公开了LoginCommand命令并连接到我的视图LoginPage.xaml。

执行登录命令时,应禁用“登录”按钮,进度条应可见。

如果登录失败,则应启用“登录”按钮,并隐藏进度条。

我不确定的是这种呈现逻辑应该发生的地方。它应该发生在视图模式还是页面后面的代码中?

目前我在视图模型上有一个名为LoggingIn的布尔属性,当登录过程开始时设置为true,如果失败则设置为false。这个布尔值分别挂钩了按钮和进度条的IsEnabled和Visibility属性。

这对我来说是错误的,所以我尝试制作了几个事件,OnBeginLogin和OnEndLogin,并在页面后面的代码中挂起这些代码来控制控件的可视状态。然而,这需要比以前的解决方案更多的代码。

我还可以在视图模型中公开两个特定于控件的属性,LoginButtonEnabled和ProgressBarVisible,这样我就可以从视图模型中控制视觉状态。但是,如果我添加一个取消按钮,那么我需要添加另一个名为CancelButtonEnabled的属性。

我认为不应在视图模型中处理表示逻辑,因此添加事件似乎是最佳解决方案,但我想知道最佳实践或标准/常用方法是什么?

此外,当登录成功时,应该将用户返回到上一页还是在视图模型或页面后面的代码中处理另一页?再次,我觉得这不是视图模型的东西,但我不确定。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我不确定为什么你感觉不对,但你的第一种方法似乎对我来说是最正确的。视图模型正确地将应用程序的状态暴露给视图,然后您使用数据绑定来控制它转换为表示的方式。