到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

到singleton类的数据绑定

如果您想在文本框中键入时更新日志,则需要将绑定模式更改为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}"  />