Хотя можно использовать Binding
для вызова метода и получения его возвращаемого значения, это не так просто. намного проще привязать к свойствам и использовать комбинацию привязки и уведомления об изменениях, чтобы получить искомый результат.
Создайте класс с двумя свойствами, Filename
и Extension
. Filename
это просто свойство чтения / записи строки. Extension
является строковым свойством только для чтения, метод получения которого вызывает метод, который вы пытаетесь вызвать.
Теперь заставьте этот класс реализовать INotifyPropertyChanged
, потому что если свойство может измениться в коде, ему нужен способ сообщить привязке, что он это сделал. Заставьте установщик свойства Filename
уведомлять привязки об изменении свойства Extension
.
Добавьте Binding
к TextBox
, который привязывается к свойству Filename
в режиме TwoWay
. Добавьте Binding
к TextBox
, который привязывается к Extension
, используя режим OneWay
по умолчанию.
Последовательность событий:
- Пользователь вводит новый
Filename
в поле TextBox
и нажимает клавишу TAB.
-
TextBox
теряет фокус.
- Поскольку режим
Binding
- TwoWay
, и он использует поведение по умолчанию для обновления источника, когда цель теряет фокус, это то, что она делает.
-
Binding
обновляет источник, вызывая установщик Filename
.
- Сеттер
Filename
поднимает PropertyChanged
.
-
Binding
обрабатывает PropertyChanged
, просматривает его аргумент и видит, что свойство Extension
изменилось.
-
Binding
вызывает получателя свойства Extension
.
- Получатель свойства
Extension
вызывает метод для определения расширения для Filename
и возвращает его Binding
.
-
Binding
обновляет свою цель TextBox
новым значением Extension
.
Это основная концепция, лежащая в основе привязки данных и шаблона MVVM. Как только вы это понимаете, это становится второй натурой, и разработка WPF становится легче примерно в десять миллионов раз.