WPF数据绑定不起作用

时间:2011-08-20 06:03:16

标签: wpf data-binding textbox

这是我从字符串(History.current_commad)到文本框(tbCommand)的数据绑定:

        history = new History();

        Binding bind = new Binding("Command");

        bind.Source = history;
        bind.Mode = BindingMode.TwoWay;
        bind.Path = new PropertyPath("current_command");
        bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

        // myDatetext is a TextBlock object that is the binding target object
        tbCommand.SetBinding(TextBox.TextProperty, bind);
        history.current_command = "test";

history.current_command正在更改但文本框未更新。有什么问题?

由于

1 个答案:

答案 0 :(得分:1)

您没有看到TextBlock中反映的更改的原因是因为current_command只是一个字段,因此Binding不知道它何时被更新。

解决此问题的最简单方法是让您的History类实现INotifyPropertyChanged,将current_command转换为属性,然后在setter中设置PropertyChanged事件你的财产:

public class History : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }

    private string _current_command;
    public string current_command
    {
        get
        {
            return _current_command;
        }
        set
        {
            if (_current_command == null || !_current_command.Equals(value))
            {
                // Change the value and notify that the property has changed
                _current_command = value;
                NotifyPropertyChanged("current_command");
            }
        } 
    }
}

现在,当您为current_command分配值时,该事件将会触发,Binding也会知道更新其目标。

如果您发现自己有很多类要绑定到它们的属性,那么您应该考虑将事件和帮助器方法移动到基类中,这样就不会重复编写相同的代码。