Jef*_*Fay 30 wpf exception-handling mvvm
我的视图模型类有一个连接到服务的方法(不确定这是好的做法,还是视图模型应该是严格的属性和属性更改机制).当然,我想在连接或断开连接时处理任何可能的WCF异常.
让我们使用未找到的端点作为示例,考虑到这是一个我希望引起用户注意的异常.考虑粗略的代码示例:
public void Connect()
{
ServiceClient proxy = null;
try
{
proxy = new ServiceClient();
proxy.Subscribe();
// ...
}
catch(EndpointNotFoundException)
{
// should I do something here?
}
// .. other WCF related exception catches and a finally
}
Run Code Online (Sandbox Code Playgroud)
是否可以直接在catch中调用System.Windows.MessageBox.Show()或者我是否应该重新抛出异常以便我的WPF应用程序的另一层捕获它?如果是这样,那么捕捉这种例外的理想地点在哪里?
Dan*_*n J 34
我一直在处理我的MVVM客户端中的异常,通过捕获它们并将它们包装在ErrorViewModel任何ViewModel捕获异常的属性中.
假设一个ViewModel A捕获到EndpointNotFoundException.为了呈现此错误,我将Exception包装在ErrorViewModel中并将其分配给A的Error属性.
与A关联的视图包含ContentControl绑定到A的Error属性.同时,我使用a DataTemplate将Error View与ErrorViewModel相关联.在该视图中,Visibility由A的Error属性是否包含异常确定.
因此,A的视图包含一个错误消息视图,该视图仅在捕获到异常时出现,并且可以被用户解除(错误消息View上的OK按钮调用A上的命令清除A的Error属性,从而将错误消息View的可见性更改为Collapsed).
到目前为止,这似乎是一种保留适当的MVVM去耦的好方法.
希望有所帮助.不管怎样,老实说,我认为System.Windows.MessageBox.Show()在WPF应用程序中纯粹是最后的手段.为什么放弃对UI的丰富控制以支持旧的东西?说到这里,这是另一种弹出式实现方法.
| 归档时间: |
|
| 查看次数: |
13049 次 |
| 最近记录: |