【问题标题】:Data binding to singleton class数据绑定到单例类
【发布时间】:2014-12-03 17:45:14
【问题描述】:

我在这里搜索了很多次并找到了一堆示例,但似乎无法正常工作。

我设置了一个解决方案,其中 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 处理程序永远不会被绑定自动填充,因此不会检测到任何更改。我做错了什么,我只是不知道是什么......

感谢您的宝贵时间, 盲人

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

    到行:

    <TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay}"  />
    

    尝试像这样添加“UpdatedSourceTrigger”:

    <TextBox IsEnabled="True" Text="{Binding Log.Text, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"  />
    

    【讨论】:

      【解决方案2】:

      如果您想在文本框中输入时更新日志,您需要将绑定模式更改为双向。当您退出文本框时也会触发该事件,而不是在输入的每个字符上。

      如果您想在日志更改时更新文本框,您需要向 Text 属性添加一个设置器并引发 NotifyPropertyChanged 事件(在设置器中)。

      还要检查程序的输出是否有一些绑定错误。

      【讨论】:

        猜你喜欢
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        • 2012-05-01
        • 1970-01-01
        • 2018-08-01
        相关资源
        最近更新 更多