在后台将值从 Class 发送到 WPF Window

Sending Values from Class to WPF Window in the background

我有一个 WPF window,其中包含一个 'textbox status console',它显示程序运行时后台发生的事情 运行。比如程序向数据库保存数据时,控制台应该显示"Saving Data. Saving complete".

然而,所有过程(例如保存数据、检索数据)都是通过不同的 类 完成的,WPF C# Window 是分开的。

Class答:

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

与此同时,另一个进程也可以打印另一条消息。这一切都应该在后台发生。我相信 Window 需要有一个监听器,每次发送消息时,它都需要在文本框中打印出来。我应该使用什么方法?

我知道我能做到:

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

但其他几个 类 独立工作,并不总是遵循一步一步的过程,而是在收到值后立即打印消息等。

听起来您需要一个负责写入 "console" 的静态侦听器对象。

每个人都可以在需要时发送该对象消息,他负责将它们写出来(附加或替换文本,不知道您需要什么)。

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

这是我编写的项目中的一些代码:

/// <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 static class,您可以在此处放置您需要的全局助手。 然后通过静态绑定将你的元素绑定到这个属性(你可以在Whosebug的某个地方找到它,如果你找不到它告诉我)