Установка и привязка DataContext в WPF со ссылкой «Self»

Фраза «wpf d:datacontext self», по-видимому, представляет собой комбинацию технологий, связанных с Windows Presentation Foundation (WPF) и привязкой данных в контексте приложений WPF. Давайте разберемся:

“WPF” означает Windows Presentation Foundation, графическую подсистему в платформе Microsoft.NET, используемую для создания настольных приложений.
“d:datacontext”, скорее всего, относится к механизму привязки данных в WPF, где вы может установить связь между элементами пользовательского интерфейса и базовым источником данных.
“self” может означать, что контекст данных установлен на текущий экземпляр класса или элемента управления.

Предполагая, что приведенная выше интерпретация верна, фраза «wpf d:datacontext self» может указывать на сценарий, в котором контекст данных в приложении WPF устанавливается на текущий экземпляр класса или элемента управления.

Теперь давайте рассмотрим некоторые методы, связанные с этим сценарием:

  1. Настройка контекста данных в XAML. Вы можете установить контекст данных в XAML, используя свойство DataContextэлемента и присвоив ему значение, например {Binding. code>или {RelativeSource Self.

Пример:

<Button DataContext="{Binding}" Content="Click me!" />
  1. Программная настройка DataContext. Вы также можете установить контекст данных в файлах с выделенным кодом или просмотреть модели, используя свойство DataContextэлемента управления.

Пример:

MyControl.DataContext = this;
  1. Использование RelativeSource Self. В XAML вы можете использовать расширение разметки RelativeSourceс режимом Selfдля привязки к текущему экземпляру элемента управления.

Пример:

<TextBlock Text="{Binding SomeProperty, RelativeSource={RelativeSource Self}}" />
  1. Реализация интерфейса INotifyPropertyChanged. Если вы хотите включить двустороннюю привязку данных и автоматические обновления, вы можете реализовать интерфейс INotifyPropertyChangedв своем классе или модели представления. Этот интерфейс предоставляет события, которые уведомляют пользовательский интерфейс об изменении значения свойства.

Пример:

public class MyClass : INotifyPropertyChanged
{
    private string _myProperty;
    public string MyProperty
    {
        get { return _myProperty; }
        set
        {
            if (_myProperty != value)
            {
                _myProperty = value;
                OnPropertyChanged(nameof(MyProperty));
            }
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}