WPF привязка данных не работает - PullRequest
0 голосов
/ 20 августа 2011

Это моя привязка данных из строки (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 Ответ

1 голос
/ 20 августа 2011

Причина, по которой вы не видите изменения, отраженного в TextBlock, заключается в том, что current_command - это просто поле, поэтому Binding не знает, когда оно было обновлено.

Самое простоеЧтобы исправить это, нужно, чтобы ваш класс History реализовал INotifyPropertyChanged, преобразовал current_command в свойство и затем вызвал событие 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 также узнает, как обновить свою цель.

Если вы обнаружите, что у вас много классов, где выЕсли вы хотите связать их свойства, вам следует рассмотреть возможность перемещения события и вспомогательного метода в базовый класс, чтобы вы не писали один и тот же код несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...