Вероятно, этот код пахнет. Вы смешиваете класс обслуживания и контроль. Лучше сделай что-нибудь подобное. Определите событие в вашем ILogger и тип его аргументов:
открытый интерфейс ILogger
{
event EventHandler NewUsageLogEntry;
}
public class LogEventArgs : EventArgs
{
public LogEventArgs(string aMessage)
{
Message = aMessage;
}
public string Message { get; private set; }
}
ViewModel:
public class LogModeViewModel : ModeViewModel
{
public LogModeViewModel(ILogger aLogger)
{
if (aLogger == null)
{
throw new ArgumentNullException("aLogger", "Логгер не задан.");
}
Logger = aLogger;
Logger.NewUsageLogEntry += OnNewUsageLogEntry;
}
public ObservableCollection<ApplicationUsageLogEntry> LogMessages
{
get
{
if (mLogMessages == null)
{
mLogMessages = new ObservableCollection<ApplicationUsageLogEntry>();
}
return mLogMessages;
}
}
private ILogger Logger { get; set; }
private void OnNewUsageLogEntry(object aSender, LogEventArgs aEventArgs)
{
ApplicationUsageLogEntry lLogEntry = new ApplicationUsageLogEntry(aEventArgs.Message);
LogMessages.Add(lLogEntry);
}
private ObservableCollection<ApplicationUsageLogEntry> mLogMessages;
}
public class ApplicationUsageLogEntry
{
public ApplicationUsageLogEntry(string aMessage)
{
if (string.IsNullOrWhiteSpace(aMessage))
{
throw new ArgumentNullException("aMessage", "Сообщение не задано.");
}
Message = aMessage;
HappenOn = DateTime.Now;
}
public string Message { get; private set; }
public DateTime HappenOn { get; private set; }
public override string ToString()
{
string lResult = string.Format("{0:dd.MM.yyyy hh:mm:ss} | {1}", HappenOn, Message);
return lResult;
}
}
В моем коде я использую DataGrid для отображения журнала, но вы можете легко изменить LogMessages, чтобы он был строкой. После этого вам нужно привязать это свойство к вашему TextBox.Text.
Совет: обновляйте не вашу собственность напрямую. Обновите приватный StringBuilder и после этого присвойте результат StringBuilder.ToString () своему строковому свойству LogMessages.