到singleton类的数据绑定
本文关键字:数据绑定 singleton | 更新日期: 2023-09-27 18:25:57
我在这里搜索了很多次,找到了很多例子,但似乎什么都做不到。
我已经设置了一个解决方案,其中ViewModel通过定位器引用MainViewModel类。主视图模型类具有:
public NotifyLog Log
{
get { return LogMgr.Instance.Log; }
}
在里面。这允许我指定:
<TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay}" />
NotifyLog定义为:
public class NotifyLog : INotifyPropertyChanged
{
public NotifyLog()
{
_Log = new StringBuilder();
}
private void OnPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
public event PropertyChangedEventHandler PropertyChanged;
private StringBuilder _Log;
public void Append(String Value)
{
_Log.Append(Value);
OnPropertyChanged("Text");
}
public string Text
{
get { return _Log.ToString(); }
}
public override string ToString()
{
return this.Text;
}
}
对于应用程序的初始启动,会填充文本框,但是绑定永远不会自动填充OnPropertyChanged处理程序,因此不会检测到任何更改。我做错了什么,我只是不知道。。。
感谢您抽出时间,BlD
如果您想在文本框中键入时更新日志,则需要将绑定模式更改为TwoWay。此外,当您退出文本框时会触发该事件,而不是在每个键入的字符上。
如果要在日志更改时更新文本框,则需要向text属性添加一个setter,并引发NotifyPropertyChanged事件(在setter中)。
还要检查程序的输出是否存在一些绑定错误。
到行:
<TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay}" />
尝试添加"UpdatedSourceTrigger",如下所示:
<TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />