【问题标题】:Sending Values from Class to WPF Window in the background在后台将值从类发送到 WPF 窗口
【发布时间】:2015-06-21 06:11:07
【问题描述】:

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

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

A类:

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

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

我知道我能做到:

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

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

【问题讨论】:

    标签: c# .net wpf listener


    【解决方案1】:

    听起来您需要一个负责向“控制台”写入数据的静态侦听器对象。

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

    如果您使用的是 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;
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 2014-03-19
        • 2018-10-09
        • 1970-01-01
        相关资源
        最近更新 更多