Я чувствую необходимость добавить немного точности:
«Двухстороннее» связывание данных - это больше, чем «одностороннее» связывание данных.
«Односторонняя» привязка данных - это привязка источника к свойству зависимости. Источник должен реализовать INotifyProertyChanged, чтобы получить распространение изменений от источника к цели.
Чтобы получить «2 пути», то есть, чтобы получить распространение от цели к источнику, это зависит от режима привязки, который вы установили в привязке. Если для привязки не установлен какой-либо BindingMode, будет использоваться режим привязки по умолчанию, и этот режим по умолчанию является характеристикой для целевого свойства зависимости.
Пример:
Текстовое поле, привязанное к строковому свойству, называемое «MyTextProperty».
В коде вы связываете Textbox.Text DependencyProperty с «MyTextProperty» для объекта «MyObject»
-> «односторонняя» привязка: установщик «My TextProperty» должен вызвать событие Property Changed, а «MyObject» должен реализовать INotifyPropertyChanged.
-> «Двухстороннее связывание данных»: в дополнение к тому, что необходимо для «Одностороннего», для привязки необходимо установить «2 способа». В этом особом случае свойство Text DependencyProperty для Textbox имеет «2 пути» в качестве режима по умолчанию, поэтому больше ничего не нужно делать!