Я определил DataTemplate для ListBox. Внутри шаблона я использую элементы управления TextBlock для отображения свойств контекста данных. Например:
<TextBlock Text="{Binding Path=FirstName}" />
И если я сделаю это:
<TextBlock Visibility="{Binding Path=IsAccountValid}" />
... приложение запускается, но в выводе появляется предупреждение о попытке связать логическое свойство с перечислением Visibility.
Если я сделаю это:
<TextBlock Visibility="{Binding Path=IsAccountValid,Converter={StaticResource visibilityOfBool}}" />
и где-то в моем App.xaml есть:
<BooleanToVisibilityConverter x:Key="visibilityOfBool" />
Я получаю исключение нулевой ссылки.
Я подозревал, что это может быть связано с тем, что свойство IsAccountValid не является свойством зависимости, поэтому я добавил CheckBox в окно и сделал следующее:
<TextBlock Visibility="{Binding Path=IsChecked,Converter={StaticResource visibilityOfBool},ElementName=butA}" />
Но получил ту же ошибку.
Почему? Объект DataContext действителен, потому что, если я связываю IsAccountValid со свойством Text, значение отображается правильно.
Конвертер никогда не вызывается, поэтому мне интересно, если это конвертер, который не может быть найден.
Почему конвертер не может быть найден? Почему конвертер можно найти вне шаблона данных, а не внутри шаблона данных?
Я попытался построить шаблон снова с помощью Blend, поскольку Blend обычно делает это правильно, но сгенерированный код был таким же, как мой.
Я попробовал некоторые исправления, предложенные на этом веб-сайте, включая установку RelativeSource на TemplateParent и Self, но это не имело значения.
Что происходит?