메시지를 TextBlock에 기록하기 위해 전체 프로젝트를 통해 사용하려는 StatusLogger 클래스가 있습니다. 불행히도 내 클래스의 일부가 정적이기 때문에 TextBlock에 제대로 바인딩하는 방법을 알 수 없습니다.TextBlock PropertyChangedEventHandler로 텍스트 바인딩이 업데이트되지 않습니다.
XAML :
<TextBlock Name="LogTextBlock" Foreground="Silver"
Text="{Binding Path=LogText}"
Height="480" Width="588" Margin="10,10,0,0"
HorizontalAlignment="Left" VerticalAlignment="Top" />
StatusLogger 클래스 : 나는 첫 번째 방법/나는 그것을 사용하는 클래스 내에서 내 StatusLogger.WriteLine를 호출 할 때
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을 지속적으로 사용하고 PropertyChangedEventHandler를 사용하는 방법을 파악할 수 없다는 것입니다. 정적 WriteLine이 StatusLogger의 새 인스턴스를 만들고 있다고 생각하기 때문에?
내 MainWindow가 시작될 때 잘못되었다고 생각합니다. DateContext를 WPF의 StatusLogger 클래스로 설정할 수 있습니까? :
private readonly StatusLogger _statusLogger = new StatusLogger();
LogTextBlock.DataContext = _statusLogger;
어떤 제안이나 더 좋은 방법이 있습니까?
나는 그것을 시도하고 그것이 정적이 아닌 방법 때문에 작동하지 않습니다. OnPropertyChanged를 정적으로 변경하면 : INotifyPropertyChanged가 엉망이됩니다. 결국 나는 그것을 작동시키지 못했습니다. – HuntK24
응용 프로그램 시작시에만 메시지를 게시하는 것으로 보입니다. 일단 거기에 앉아 있으면, 그 이후의 모든 것은 더 이상 기록되지 않습니다. – HuntK24
그래서 나는 한 시간을 낭비하고 PropertyChanged 객체는 항상 null입니다. 나는 그것이 새로운 메시지가 게시되지 않는 이유라고 생각합니다. – HuntK24