メッセージを TextBlock に記録するためにプロジェクト全体で使用したい StatusLogger クラスがあります。残念ながら、クラスの一部が静的であるため、TextBlock に適切にバインドする方法がわかりません。
XAML:
<TextBlock Name="LogTextBlock" Foreground="Silver"
Text="{Binding Path=LogText}"
Height="480" Width="588" Margin="10,10,0,0"
HorizontalAlignment="Left" VerticalAlignment="Top" />
StatusLogger クラス:
public class StatusLogger : INotifyPropertyChanged
{
#region Fields
private static StringBuilder _logText = new StringBuilder();
#endregion
#region Properties
public string LogText
{
get { return _logText.ToString(); }
}
#endregion
#region Methods
public static void WriteLine(string text, params object[] args)
{
_logText.AppendFormat(text + Environment.NewLine, args);
}
#endregion
#region Property Change Handler
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(null, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
したがって、使用する最初のメソッド/クラス内で StatusLogger.WriteLine を呼び出すと、メッセージが実際に投稿されます。私の問題は、他のメソッドやクラスで StatusLogger.WriteLine を継続的に使用し、PropertyChangedEventHandler にそれを取得させる方法がわからないことです。静的な WriteLine が StatusLogger の新しいインスタンスを作成していると思うからですか?
MainWindowの起動時にも、これが間違っているように感じます。DateContext を WPF の StatusLogger クラスに設定できますか?:
private readonly StatusLogger _statusLogger = new StatusLogger();
LogTextBlock.DataContext = _statusLogger;
これを行うための提案やより良い方法はありますか?