Подтвердить что ты не робот

Свойство привязки для управления в Winforms

Каков наилучший способ привязать свойство к элементу управления, чтобы при изменении значения свойства свойство привязки управления изменялось вместе с ним.

Итак, если у меня есть свойство FirstName, которое я хочу привязать к текстовому значению textbox txtFirstName. Поэтому, если я изменяю FirstName на значение "Stack", свойство txtFirstName.Text также изменяется на значение "Stack".

Я знаю, это может показаться глупым вопросом, но я буду благодарен за помощь.

4b9b3361

Ответ 1

Вы должны реализовать INotifyPropertyChanged и добавить привязку к текстовому окну.

Я предоставил фрагмент кода С#. Надеюсь, что это поможет.

class Sample : INotifyPropertyChanged
{
    private string firstName;
    public string FirstName
    {
        get { return firstName; }
        set
        {
            firstName = value;
            InvokePropertyChanged(new PropertyChangedEventArgs("FirstName"));
        }
    }

    #region Implementation of INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    public void InvokePropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, e);
    }

    #endregion
}

Использование:

 Sample sourceObject = new Sample();
 textbox.DataBindings.Add("Text",sourceObject,"FirstName");
 sourceObject.FirstName = "Stack"; 

Ответ 2

Упрощенная версия принятого ответа, которая не требует автоматического ввода имен свойств вручную:

public class Sample : INotifyPropertyChanged
{
    private string _propString;
    private int _propInt;
    public event PropertyChangedEventHandler PropertyChanged;

    public string PropString
    {
        get { return _propString; }
        set
        {
            // do not trigger change event if values are the same
            if (Equals(value, _propString)) return;
            _propString = value;
            OnPropertyChanged();
        }
    }

    public int PropInt
    {
        get { return _propInt; }
        set
        {
            // do not allow negative numbers, but always trigger a change event
            _propInt = value < 0 ? 0 : value;
            OnPropertyChanged();
        }
    }

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

Надеюсь, это поможет кому-то.