おそらくこのコードは匂いがします。あなたはサービスクラスとコントロールを混在させます。このようなことをうまくやってください。 ILoggerとその引数にイベントを定義します。 public interface ILogger { event EventHandler NewUsageLogEntry; }
public class LogEventArgs : EventArgs
{
public LogEventArgs(string aMessage)
{
Message = aMessage;
}
public string Message { get; private set; }
}
のViewModel:私はログを表示するために、データグリッドを使用していますが、簡単に文字列であることをLogMessagesを変更することができます私のコードで
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;
}
}
。その後、このプロパティをTextBox.Textにバインドする必要があります。 ヒント:あなたの財産を直接更新しないでください。プライベートStringBuilderを更新した後、StringBuilder.ToString()の結果をLogMessages文字列プロパティに代入します。