0

我是新的 MVVM 模式。

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

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

当登录命令被执行时,登录按钮应该被禁用并且进度条应该变得可见。

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

我不确定的是这个表示逻辑应该发生在哪里。它应该发生在视图模式还是页面后面的代码中?

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

这对我来说是错误的,所以我尝试制作几个事件,OnBeginLogin 和 OnEndLogin 并将它们连接到页面后面的代码中,这些代码用于控制控件的视觉状态。然而,这需要比以前的解决方案更多的代码。

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

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

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

谢谢你的帮助。

4

1 回答 1

1

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

于 2013-03-24T21:00:40.870 回答