我有一个 StatusLogger 类,我想在整个项目中使用它来将消息记录到 TextBlock 中。不幸的是,我无法弄清楚如何正确地将它绑定到 TextBlock,因为我的类的某些部分是静态的。
XAML:
<TextBlock Name="LogTextBlock" Foreground="Silver"
Text="{Binding Path=LogText}"
Height="480" Width="588" Margin="10,10,0,0"
HorizontalAlignment="Left" VerticalAlignment="Top" />
状态记录器类:
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 启动时也做错了。我可以在 WPF 中将 DateContext 设置为我的 StatusLogger 类吗?:
private readonly StatusLogger _statusLogger = new StatusLogger();
LogTextBlock.DataContext = _statusLogger;
有什么建议或更好的方法吗?