我想知道关于WPF绑定Textbox的信息

时间:2017-12-19 05:31:02

标签: c# wpf binding textbox

我正在尝试使用xaml中的WPF制作记录器系统。我制作了以下招标代码:

<TextBlock x:Name="textBlock"
           HorizontalAlignment="Left"
           Margin="10,194,0,0"
           TextWrapping="Wrap"
           VerticalAlignment="Top"
           Height="51"
           Width="366"
           Text="{Binding LogView,
                          Source={StaticResource logViewModel},
                          UpdateSourceTrigger=PropertyChanged}" />

绑定文本正常工作,但在文本框中,字符串仅在文本框的第一行更新。该字符串应在下一行更新, 我不能像下面的代码一样使用追加字符串,因为我将解析字符(例如D,E,I),然后更改字符串颜色:

mLogViewStr+=value;
请帮助我......

logViewModel:

 namespace StretcherUI.Device
    {
        class LogViewModel : ILogHandler,
                             INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            static string savePath = @"d:\log.txt";
            const int logListSize = 500;
            public LogViewModel()
            {
                Logger.sLogHandler = this;
            }


            private string mLogViewStr;
            public string LogView
            {
                get { return mLogViewStr; }
                set
                {
                    mLogViewStr = value;               
                }
            }

            protected void OnPropertyChanged(string propertyName)
            {
                PropertyChanged?.Invoke(
                                    this,
                                    new PropertyChangedEventArgs(propertyName));
            }

            public void onLog(string logFmt, params object[] arg)
            {
                LogView = string.Format(logFmt, arg);
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

您应该在公共设置器中调用 OnPropertyChanged ,这样WPF视图就可以理解它有待更新

  public string LogView
            {
                get { return mLogViewStr; }
                set
                {
                    mLogViewStr = value;
                    OnPropertyChanged("LogView");
                }
            }

答案 1 :(得分:2)

仅当您通知View时,从模型到视图的绑定才起作​​用。因此,为了通知视图,模型应该实现INotifyPropertyChanged(你做过)并在每次绑定属性改变时调用PropertyChanged(你错过了)。 只需像这样修改你的代码:

public string LogView {
  get {
    return mLogViewStr;
  }
  set {
    mLogViewStr = value;
    OnPropertyChanged(nameof(LogView))             
  }
}