在后台将值从 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的某个地方找到它,如果你找不到它告诉我)
我有一个 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的某个地方找到它,如果你找不到它告诉我)