我正在尝试使用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);
}
}
}
答案 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))
}
}