代码之家  ›  专栏  ›  技术社区  ›  Ian Gregory

处理ViewModel/Model中的致命异常

  •  13
  • Ian Gregory  · 技术社区  · 14 年前

    我有一个使用m-v-v m方法编写的应用程序。

    数据访问在模型中完成。如果此处发生致命错误(例如,与数据源的连接丢失),则引发异常。此异常将冒泡到ViewModel。

    但是,由于数据访问的原始触发器是数据绑定,因此WPF会忽略此异常(仅当应用程序在调试器下运行时,它才会记录在输出窗口中)。

    我希望这个异常保持未处理状态,这样我的应用程序范围内的未处理异常处理程序就可以接收它,记录它并优雅地退出。我怎样才能做到这一点?

    2 回复  |  直到 6 年前
        1
  •  8
  •   Andrew Shepherd    6 年前

    您可以在调度程序上对引发操作的异常进行排队。

        // This property is connected to the window using databinding
        public string ExceptionThrowingBoundedField
        {
            get
            {
    
                try
                {
                    // This function might throw an exception
                    return GetValueFromDatabase();               
                }
                catch (Exception ex)
                {
                    ApplicationException exWrapper = new ApplicationException(
                        "Wrapped Exception",                                                     
                         ex
                    );
                    Action throwException = () => { throw exWrapper; };
                    Dispatcher.CurrentDispatcher.BeginInvoke(throwException);
                    return "";
                }
            }
        }
    
        2
  •  6
  •   Adrian Russell    14 年前

    最近遇到的 a way of getting 以一种全球性的方式解决吞并的异常问题。

    创建自定义绑定类并重写 UpdateSourceExceptionFilter -请参阅此线程中的示例。

    不幸的是,这只是WPF 4.0,而不是SL 4.0。