在WPF应用程序中将文本发送到上层

在WPF应用程序中将文本发送到上层,wpf,exception,3-tier,Wpf,Exception,3 Tier,我正在做一个WPF(不是web)应用程序 三层 EF代码优先 UI层对逻辑层的引用和逻辑层对数据层的引用 现在,我在数据层中有一个异常,我需要根据异常生成的文本显示一个MessageBox 但我不想在数据层中添加对WindowsBase、PresentationCore和PresentationFramework的引用 如何从数据层向UI层发送文本并显示MessageBox 短暂性脑缺血发作 相关代码: 在UI层中 public void guardar(UserControlClien

我正在做一个WPF(不是web)应用程序

三层

EF代码优先

UI层对逻辑层的引用和逻辑层对数据层的引用

现在,我在数据层中有一个异常,我需要根据异常生成的文本显示一个MessageBox

但我不想在数据层中添加对WindowsBase、PresentationCore和PresentationFramework的引用

如何从数据层向UI层发送文本并显示MessageBox

短暂性脑缺血发作

相关代码:

在UI层中

    public void guardar(UserControlCliente UCCliente)
    {
        admin.guardarEntidadCliente(UCCliente.textBoxNombre.Text,
                                    UCCliente.textBoxPrimerApellido.Text,
                                    UCCliente.textBoxSegundoApellido.Text,
                                    "Normal",
                                    DateTime.Parse("01/01/2012"),
                                    DateTime.Parse("02/02/2012"),
                                    "obs 1");
    }

    private void buttonAgregar_Click(object sender, RoutedEventArgs e)
    {
        guardar(this);
    }
在逻辑层中

    public void guardarEntidadCliente(String nombre, String app1, String app2, String tipo,
                                      DateTime fechaReg, DateTime fechaUltCita, String obs)
    {
        Cliente cliente = new Cliente();
        cliente.Nombre = nombre;
        cliente.Apellido1 = app1;
        cliente.Apellido2 = app2;
        cliente.Tipo = tipo;
        cliente.FechaRegistro = fechaReg;
        cliente.FechaUltimaCita = fechaUltCita;
        cliente.Observaciones = obs;

        ControlDatos cd = new ControlDatos();
        cd.agregarCliente(cliente);
    }
在数据层中

    public void agregarCliente(Cliente cliente)
    {
        db.Clientes.Add(cliente);

        try
        {
            db.SaveChanges();
        }
        catch (DbEntityValidationException exc)
        {
            String mensaje = "";

            foreach (var validationErrors in exc.EntityValidationErrors)
                foreach (var validationError in validationErrors.ValidationErrors)
                    mensaje += validationError.ErrorMessage + "\n";

            db.Entry(cliente).State = EntityState.Detached;
            // MessageBox.Show(mensaje, "Se han encontrado errores", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }

我需要在UI层中运行注释行。

您可以在UI层上处理数据层异常。你不是吗

您可以为此目的使用事件

编辑

根据您的代码,您可以抛出特殊类型(例如MyDataTierException)的异常(您希望
MessageBox
显示的异常),并用您的消息初始化它


在UI层中,您应该订阅DispatcherUnhandledException,并根据需要处理它-显示MessageBox,您可以从异常中获取文本。

您可以在逻辑层中捕获异常,处理它(写入日志或任何其他内容)从异常中获取消息,并传递到ui层命令,以用户友好的方式显示消息appearance@ASpirin好啊我不知道怎么做,但这是研究的开始。谢谢,好的。现在我不知道怎么做,但这是研究的开始。谢谢