Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 BindingExpression path error, хотя ничего не предвещало  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 389
Есть грид:
<DataGrid x:Name="PeopleGrid"
    ItemsSource="{Binding PeopleListView, Mode=TwoWay}"
    ...

Шаблон ячейки одного из столбцов грида:
<DataTemplate x:Key="BirthdateTemplate">
    <DockPanel VerticalAlignment="Stretch">
        <WPFControlLib:TextBlockDateView texttt="{Binding Birthdate}" />
    </DockPanel>
</DataTemplate>


TextBlockDateView наследован от UserControl, а texttt - это у него propdp такой.

В процессе выполнения выдаётся ошибка
System.Windows.Data Error: 40 : BindingExpression path error: 'Birthdate' property not found on 'object' ''TextBlockDateView' (Name='')'. BindingExpression:Path=Birthdate; DataItem='TextBlockDateView' (Name=''); target element is 'TextBlockDateView' (Name=''); target property is 'texttt' (type 'String')

Выделил жирным непонятное - почему он Birthday ищет в моём контроле, а не в контексте грида?

Если я фрагмент
WPFControlLib:TextBlockDateView texttt

заменю на
TextBlock Text

всё будет работать корректно - значения будут отображаться. Обращение к полю Birthday контекста окна будет корректным, ошибки не возникает, значение поля Birthday возьмётся из контекста строки грида.
5 фев 18, 01:30    [21165413]     Ответить | Цитировать Сообщить модератору
 Re: BindingExpression path error, хотя ничего не предвещало  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6023
Где-нибудь в юзерконтроле часом не установлено
DataContext=this;

?
5 фев 18, 05:51    [21165463]     Ответить | Цитировать Сообщить модератору
 Re: BindingExpression path error, хотя ничего не предвещало  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 389
Сон Веры Павловны
Где-нибудь в юзерконтроле часом не установлено
DataContext=this;


?

да...

Больше того скажу. Нарыл хорошую статью, там говорится про отладку связей.
Прописал,
diag:PresentationTraceSources.TraceLevel=High
запустил, он выдал лог и всё стало ясно - он находит DataContext, которого быть не должно.
5 фев 18, 11:25    [21166140]     Ответить | Цитировать Сообщить модератору
 Re: BindingExpression path error, хотя ничего не предвещало  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4031
скиньте код объявления DP, Смахивает на несоответствие типа, если вы используйте свойство string, то передавать туда надо string, в не DateTime и наоборот
5 фев 18, 11:33    [21166195]     Ответить | Цитировать Сообщить модератору
 Re: BindingExpression path error, хотя ничего не предвещало  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 389
Roman Mejtes
скиньте код объявления DP, Смахивает на несоответствие типа, если вы используйте свойство string, то передавать туда надо string, в не DateTime и наоборот

да мы тут с Сон Веры Павловны разобрались как раз буквально только что...
Там не смотря на присутствие слова "Date" все типы string. Типов DateTime просто нет.
Проблема в том, что я в своём контроле устанавливал DataContext. Я думал, что это ни на что не повлияет, но вот когда я смотрел лог для TextBlock, я там увидел
System.Windows.Data Warning: 69 : BindingExpression (hash=2902278): Found data context element: TextBlock (hash=18876224) (OK)
System.Windows.Data Warning: 70 : BindingExpression (hash=2902278): DataContext is null
System.Windows.Data Warning: 64 : BindingExpression (hash=2902278): Resolve source deferred

А когда TextBlock заменил на свой компонент, то выделенной строки не было. И тут сразу стало ясно, что я перебиваю DataContext, вот он и обращается к моему же элементу, а не к контексту строки грида.
5 фев 18, 11:42    [21166232]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить