我的视图模型类有一个连接到服务的方法(不确定这是否是一个好的实践,或者视图模型是否应该是严格的属性和属性更改机制)。当然,我想在连接或断开连接时处理任何可能的 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
}
直接在 catch 中调用 System.Windows.MessageBox.Show() 是否被认为是好的做法,或者我应该重新抛出异常,以便 WPF 应用程序的另一层捕获它?如果是这样,捕获此类异常的理想位置在哪里?
我一直在处理 MVVM 客户端中的异常,方法是捕获它们并将它们包装在一个ErrorViewModel
任何财产ViewModel
捕获了异常。
假设有一个 ViewModelA捕获 EndpointNotFoundException。为了呈现此错误,我将 Exception 包装在 ErrorViewModel 中并将其分配给A的错误属性。
关联的视图A包含一个ContentControl
势必A的错误属性。同时,我使用一个DataTemplate
将错误视图关联到 ErrorViewModel。在该视图中,Visibility
由是否决定A的 Error 属性包含异常。
So A的视图包含一个错误消息视图,该视图仅在捕获异常时才会出现,并且可以由用户关闭(错误消息视图上的“确定”按钮会调用A清除A的 Error 属性,从而将错误消息视图的可见性更改为Collapsed
).
到目前为止,这似乎是保留适当 MVVM 解耦的好方法。
希望有帮助。无论如何,老实说,我会考虑System.Windows.MessageBox.Show()
在 WPF 应用程序中作为纯粹的最后手段。为什么要放弃对 UI 的丰富控制而选择旧的东西呢?说到这里,另一种弹出实现方法 https://stackoverflow.com/questions/454868/handling-dialogs-in-wpf-with-mvvm.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)