gpt4 book ai didi

wpf - 我在哪里捕获 MVVM 中的异常?

转载 作者:行者123 更新时间:2023-12-03 09:10:28 25 4
gpt4 key购买 nike

我的 View 模型类有一个连接到服务的方法(不确定这是否是好的做法,或者 View 模型是否应该是严格的属性和属性更改机制)。当然,我想在连接或断开连接时处理任何可能的 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
}

直接在捕获中调用 System.Windows.MessageBox.Show() 是否被认为是一种好习惯,或者我应该重新抛出异常以便我的 WPF 应用程序的另一层捕获它?如果是这样,捕捉这种异常的理想地点在哪里?

最佳答案

我一直在处理我的 MVVM 客户端中的异常,方法是捕获它们并将它们包装在 ErrorViewModel 捕获异常的任何 ViewModel 属性中。

假设一个 ViewModel 一个 捕获了 EndpointNotFoundException。为了显示此错误,我将异常包装在 ErrorViewModel 中并将其分配给 A 的 Error 属性。

A 关联的 View 包含绑定(bind)到 A 的错误属性的 ContentControl。同时,我使用 DataTemplate 将错误 View 关联到 ErrorViewModel。在该 View 中,Visibility 取决于 A 的 Error 属性是否包含异常。

所以 A 的 View 包含一个错误消息 View,它只会在捕获到异常时出现,并且可以被用户关闭(错误消息 View 上的 OK 按钮会调用 A 上的命令来清除 的 Error 属性,从而将错误消息 View 的可见性更改为 Collapsed )。

到目前为止,这似乎是一种保留适当 MVVM 解耦的好方法。

希望有帮助。无论如何,老实说,我认为 WPF 应用程序中的 System.Windows.MessageBox.Show() 纯粹是最后的手段。为什么要放弃对 UI 的丰富控制权而转而使用那个旧东西?说到这里,这里是 another popup-implementation approach

关于wpf - 我在哪里捕获 MVVM 中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4228483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com