2

因此,我创建了一个 TextBlock,我想将所有消息记录到其中,但目前我被困在一次只发布 1 条消息并覆盖前一条消息的地方。我当前的代码:

XAML:

<TextBlock Name="LogTextBlock" Foreground="Silver"
           Height="480" Width="588" Margin="10,10,0,0"
           HorizontalAlignment="Left" VerticalAlignment="Top">
       <TextBlock.Text>
            <MultiBinding StringFormat="{}{0}">
                 <Binding Path="LogText" />
            </MultiBinding>
       </TextBlock.Text>
 </TextBlock>

代码:

    public class StatusLogger : INotifyPropertyChanged
    {
        private static string _logText;

        public string LogText
        {
            get { return _logText; }
            set
            {
                if (_logText == value) return;

                _logText = value;
                OnPropertyChanged("LogText");
            }
        }

        public static void WriteLine(string text, params object[] args)
        {
            _logText = String.Format(text, args);
        }

        #region Property Change Handler

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

        #endregion
    }

我如何使用 StatusLogger 在我的代码中静态使用它,例如

StatusLogger.WriteLine("{0}: Testing the first message!{1}", DateTime.Now, Environment.NewLine);
StatusLogger.WriteLine("{0}: Testing the second message!{1}", DateTime.Now, Environment.NewLine);

基本上,它一次显示一行,但我希望它显示我添加到其中的每一行的历史记录。我已经尝试了几种不同的方式,但我目前发布了我目前拥有的内容。

4

1 回答 1

4

问题是该方法用返回值WriteLine()覆盖了任何内容。因此,您正在用新行替换先前记录的行。_logTextString.Format()

更好的方法可能是使用 a StringBuilder,特别是如果您预计会显示很多行:

public class StatusLogger : INotifyPropertyChanged
{
    private static StringBuilder _logText = new StringBuilder();

    public string LogText
    {
        get { return _logText.ToString(); }
        set
        {
            _logText = new StringBuilder(value);
            OnPropertyChanged("LogText");
        }
    }

    public static void WriteLine(string text, params object[] args)
    {
        _logText.AppendFormat(text + Environment.NewLine, args);
    }
}
于 2013-08-13T19:33:40.783 回答