Свяжите маркировку с “переменной”

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

Скажите, что у меня есть Элемент управления "метка", названный "маркировкой". Вот то, что я хочу выполнить:

Я хочу "связать" значение маркировки. Текст к переменной X. Таким способом, которым, когда переменная X будет заменена, это будет отражено назад для маркировки. Текст.

Теперь, я не хочу писать слушателям события и играть с делегатами с этим (я хочу наименьшее количество объема кода как возможное). Существует ли способ использовать компонент DataBinding для этого? или какие-либо другие новые методы?

24
задан Martin Vseticka 11 May 2019 в 12:51
поделиться

3 ответа

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

Таким образом, лучший способ сделать это - использовать свойство и реализовать интерфейс INotifyPropertyChanged , например:

class frmFoo : Form, INotifyPropertyChanged
{        
    private string _foo;

    public string Foo
    {
        get { return _foo; }
        set
        {
            _foo = value;
            OnPropertyChanged("Foo");
        }
    }

    protected virtual void OnPropertyChanged(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion
}

Также помните, что вам нужно сначала настроить привязку к метке:

public frmFoo()
{
    InitializeComponent();
    lblTest.DataBindings.Add(new Binding("Text", this, "Foo"));
}
32
ответ дан 28 November 2019 в 23:24
поделиться

Я не думаю, что вы сможете выполнить привязку к публичной переменной. Сама по себе переменная не может уведомлять слушателей об изменении своего значения.

Вот почему вам нужно заключить переменную в свойство. В установщике вы вызываете событие, чтобы уведомить связанные с ним элементы управления пользовательского интерфейса, чтобы они могли обновить и отобразить новое значение. У инфраструктуры есть механизм для этого - INotifyPropertyChanged - попробуйте эту ссылку, чтобы получить инструкции .

3
ответ дан 28 November 2019 в 23:24
поделиться

Создайте свойство для X. В установщике обновите свойство label.Text.

private int _x;
public int X {
    get 
    { 
        return _x; 
    } 
    set 
    { 
        _x = value;
        label.Text = _x.ToString();
    }
}
1
ответ дан 28 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: