MVVM触发事件返回查看

时间:2009-11-12 14:49:30

标签: silverlight mvvm

我有一个ViewModel,其中一个功能是与服务通信并获取一些数据。但是,如果出现问题,我希望通知用户该服务无法运行。

目前我正在做的是触发视图已订阅的事件(我的viewModel在视图的resources部分中创建)并在视图事件处理程序中接收事件我只是执行Windows.Alert()。

首先,我正在尝试减少视图后面代码中的代码量,并且事件触发时,必须有更好的方法来执行此操作吗?

其次,由于我的视图知道我的视图模型(即在资源部分中创建),我确信这会导致测试我的视图时出现问题。这是正确的方法吗?

JD。

3 个答案:

答案 0 :(得分:1)

是的,我不认为从View中订阅VM中的事件是一个好主意。将警报放在VM中几乎更好,但这会将UI放入VM并使其难以测试。还有其他几种方法可以解决这个问题。

答案 1 :(得分:1)

最好在这里使用服务。服务只是通过接口提供一些功能。

public interface IDialogService {
    void ShowNotifictation(string message);
}

ViewModel接受此服务并使用它来显示通知。然后,此服务的实现将特定于您的解决方案,并可以显示您想要的通知。

答案 2 :(得分:1)

此类服务的实现可能如下所示:

[Export(typeof(IMessageService))]
public class MessageService : IMessageService
{
    public void ShowMessage(string message)
    {
        MessageBox.Show(message);
    }
...

它使用MEF作为IoC容器。该服务通过Export属性注册为IMessageService。

您可以查看WPF Application Framework (WAF)以查看正在使用此服务的完整实施和示例应用程序。

希望这有帮助。

JBE