# Привязка (Binding). Интерфейс INotifyPropertyChanged. Форматирование значений привязки и конвертеры значений.
## Введение в привязку данных
```
```
![](./img/Снимок%20экрана%202024-04-23%20010935.png)
## Работа с привязкой в C#
```
public MainWindow()
{
InitializeComponent();
Binding binding = new Binding();
// элемент-источник
binding.ElementName = "myTextBox";
// свойство элемента-источника
binding.Path = new PropertyPath("Text");
// установка привязки для элемента-приемника
myTextBlock.SetBinding(TextBlock.TextProperty, binding);
}
```
![](./img/Снимок%20экрана%202024-04-23%20012626.png)
## Режимы привязки
```
```
![](./img/Снимок%20экрана%202024-04-23%20011715.png)
## Свойство Source
```
class Phone
{
public string Title { get; set; }
public string Company { get; set; }
public int Price { get; set; }
}
```
```
```
![](./img/Снимок%20экрана%202024-04-23%20013928.png)
## Свойство TargetNullValue
```
```
![](./img/Снимок%20экрана%202024-04-23%20013928.png)
## Свойство RelativeSource
```
```
![](./img/Снимок%20экрана%202024-04-23%20014452.png)
```
```
![](./img/Снимок%20экрана%202024-04-23%20014616.png)
## Свойство DataContext
```
```
![](./img/Снимок%20экрана%202024-04-23%20013928.png)
## Интерфейс INotifyPropertyChanged.
```
```
```
using System.ComponentModel;
using System.Runtime.CompilerServices;
class Phone : INotifyPropertyChanged
{
private string title;
private string company;
private int price;
public string Title
{
get { return title; }
set
{
title = value;
OnPropertyChanged("Title");
}
}
public string Company
{
get { return company; }
set
{
company = value;
OnPropertyChanged("Company");
}
}
public int Price
{
get { return price; }
set
{
price = value;
OnPropertyChanged("Price");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
```
![](./img/Снимок%20экрана%202024-04-23%20032736.png)
## Форматирование значений привязки и конвертеры значений
```
class Phone
{
public string Title { get; set; }
public string Company { get; set; }
public int Price { get; set; }
}
```
```
```
![](./img/Снимок%20экрана%202024-04-23%20033322.png)
## Конвертеры значений
```
public class DateTimeToDateConverter : IValueConverter
{
public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
if(parameter!=null && parameter.ToString()=="EN")
return ((DateTime)value).ToString("MM-dd-yyyy");
return ((DateTime)value).ToString("dd.MM.yyyy");
}
public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
```
```
```
![](./img/Снимок%20экрана%202024-04-23%20031122.png)