Имеется конвертер, который принимает некоторый объект и проанализировав его свойства возвращает объект Visiability. Однако обновление должно срабатывать каждый раз, когда меняется некоторое свойство этого объекта. Приведу пример:
Visibility="{Binding Source=LoadingModelProcess,
Path=LoadingModelProcess.InProgress,
Converter={StaticResource ProcessVisiabilityConverter}}">
Нужно следующее: Когда изменится значение поля bool InProgress в объекте LoadingModelProcess, в конвертер прилетел на обработку сам объект LoadingModelProcess. Как это реализовать?
Про MultiBinding знаю, но может есть какое-нибудь другое решение?
Данное решение не помогает:
<TreeView.Visibility>
<MultiBinding Converter="{StaticResource ProcessVisibilityConverter}">
<Binding Path="LoadingModelProcess" />
<Binding Path="LoadingModelProcess.InProgress" />
</MultiBinding>
</TreeView.Visibility>
Source у Binding есть всегда, и это не "выходное" значение, а "входное". Когда свойство не задано (равно null), то используется "значение по умолчанию" — текущий DataContext. Выходное значение у Binding одно, и порядок вычисления значения в Binding один:
Source / RelativeSource / ElementName ("по умолчанию": DataContext)Path / XPath ("по умолчанию": .)Converter (по умолчанию: null)StringFormat / автоматический конвертер ("по умолчанию": null)Source остаётся и выходным значением только тогда, когда все остальные преобразования в цепочке отсутствуют.
Чтобы подписаться на изменения одного свойства, а получать на выходе другое, вам нужны различающиеся входы и выходы, а значит, MultiBinding.
Минусом является то, что вам может понадобиться написать конвертер ProcessVisibilityMultiConverter, что несколько архитектурно неприятно. Самый простой альтернативный способ — реализовать IMultiConverter прямо в ProcessVisibilityConverter. Самый сложный, но мощный — сделать конвертер, который собирается из других конвертеров, чтобы можно было пробрасывать одно из значений MultiBinding в обычный конвертер.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей