在后台将类中的值发送到WPF窗口

本文关键字:WPF 窗口 后台 | 更新日期: 2023-09-27 17:57:26

我有一个WPF窗口,其中包含一个"文本框状态控制台",用于显示程序运行时后台发生的事情。例如,当程序将数据保存到数据库时,控制台应显示"保存数据。保存完成"。

然而,所有的过程(如保存数据、检索数据)都是通过不同的类完成的,并且WPF C#窗口是独立的。

A类:

public void SaveData()
{
     //Save Data
     //Print a success message in Window's Textbox
}

与此同时,另一个进程也可以打印另一条消息。这一切都应该在幕后发生。我认为Window需要有一个Listener,每次发送消息时,它都需要在文本框中打印它。我应该用什么方法?

我知道我能做到:

string message = SaveData();
consoleBox.Content = message;

但其他几个类独立工作,并不总是遵循一个循序渐进的过程,相反,它们在收到值后立即打印消息,等等。

在后台将类中的值发送到WPF窗口

听起来您需要一个静态侦听器对象来负责向"控制台"写入。

每个人都可以在需要的时候发送对象消息,他负责将其写出来(可以添加或替换文本,不知道你需要什么)。

如果您使用的是MVVM Light,那么有一个消息传递框架基本上可以做到这一点。你可以注册一个类来监听消息,然后每当你发送这种类型的消息时,它就会处理它

以下是我写的一个项目的一些代码:

/// <summary>
/// Global class used to set the status message
/// </summary>
public static class StatusSetter
{
    public static void SetStatus(string s)
    {
        Messenger.Default.Send(new StatusMessage(s));
    }
}
/// <summary>
/// Holds the status message.
/// </summary>
public class StatusMessage
{
    public StatusMessage(string status)
    {
        NewStatus = status;
    }
    public string NewStatus { get; set; }
}

并使用简单的寄存器:

/// Use this to set the status from any view/viewmodel
Messenger.Default.Register<StatusMessage>(this, Messenger_ReceiveMessage);

它简单地调用以下消息:

/// <summary>
/// Receives new status via the StatusMessage class received by the messenger.
/// </summary>
/// <param name="status"></param>
private void Messenger_ReceiveMessage(StatusMessage status)
{
    StatBarTextProp = status.NewStatus;
}

我会将文本框文本绑定到系统中的全局静态属性。如果你还没有,创建一个GLOBALS静态类,你可以在那里放置你需要的全局助手。然后通过静态绑定将您的元素绑定到此属性(您可以在stackoverflow的某个地方找到它,如果找不到,请告诉我)