我有一个ViewModel,其中一个功能是与服务通信并获取一些数据。但是,如果出现问题,我希望通知用户该服务无法运行。
目前我正在做的是触发视图已订阅的事件(我的viewModel在视图的resources部分中创建)并在视图事件处理程序中接收事件我只是执行Windows.Alert()。
首先,我正在尝试减少视图后面代码中的代码量,并且事件触发时,必须有更好的方法来执行此操作吗?
其次,由于我的视图知道我的视图模型(即在资源部分中创建),我确信这会导致测试我的视图时出现问题。这是正确的方法吗?
JD。
答案 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