Обычно вы делаете это путем реализации INotifyPropertyChanged
.Это позволяет использовать одно событие для всех свойств.Имя свойства передается в аргументах события.
partial class AbilityScoreDisplay : UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
...
}
В свойствах это делается (на примере AbilityModifier
):
private int _abilityModifier;
public int AbilityModifier
{
get { return _abilityModifier; }
private set {
if (value != _abilityModifier) {
_abilityModifier = value;
AbilityModifierTextBox.Text = value >= 0
? String.Format("+{0}", value)
: value.ToString();
OnPropertyChanged(nameof(AbilityModifier));
}
}
}
Предполагается, что этот обработчик событий
private void ScoreDisplay_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
...
}
Вы можете подписать событие на
PropertyChanged += ScoreDisplay_PropertyChanged;
Синтаксис добавления / удаления необходимо использовать только в редких случаях.Как правило, когда вы создаете свое собственное хранилище событий, потому что у вас много событий и вы не хотите использовать пространство для неподписанных событий.
Вы можете использовать INotifyPropertyChanged
вместе с привязкой данных к немедленнообновлять пользовательский интерфейс при внесении изменений в данные.Для этого вы должны создать класс со свойствами и реализацией INotifyPropertyChanged
.Затем в форме вы назначаете экземпляр этого класса DataSource
из BindingSource
.Затем элементы управления привязываются к этому BindingSource
.
Затем вы можете отбросить весь код, используемый для чтения или записи в текстовые поля или метки и т. Д., Поскольку механизм привязки делает это автоматически для вас.