2015-06-21 18 views
0

我有一個WPF窗口,其中包含一個「文本框狀態控制檯」,顯示程序運行時在後臺發生了什麼。例如,當程序將數據保存到數據庫時,控制檯應顯示「保存數據,保存完成」。將類從WPF窗口發送到後臺

但是,所有的進程(如保存數據,檢索數據)都是通過不同的類來完成的,WPF C#窗口是分開的。

A類:

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

在此期間,另一過程可打印的另一消息,以及。這應該都發生在後臺。我相信窗口需要有一個監聽器,並且每次發送消息時,都需要將其打印在文本框中。我應該使用什麼方法?

我知道我能做到這一點:

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

但一些其他類獨立工作,不遵循一個循序漸進的過程所有的時間,而不是他們儘快打印一條消息,因爲他們收到值等

回答

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; 
} 
1

我會將文本框文本綁定到系統中的全局靜態屬性。 如果你還沒有,創建一個GLOBALS靜態類,在那裏你可以把你需要的全局幫助器放在這裏。 然後通過靜態綁定將你的元素綁定到這個屬性(你可以在這裏找到它在某處的計算器,告訴我你是否找不到它)