Проблема с привязкой данных, не найдена действительная собственность - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь связать свойство в табличке данных следующим образом

<DataTemplate x:Key="NMSString0x10DataTemplate">
        <TextBlock Text="{Binding Value.Value}" MouseDown="Stringx10_MouseDown"/>
</DataTemplate>

Однако выдает ошибку

`BindingExpression path error: 'Value' property not found on 'object' ''NMSString0x10' (HashCode=51713556)'. BindingExpression:Path=Value.Value; DataItem='MBINField' (HashCode=63604780); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

теперь я знаю, что NMSString0x10 имеет свойство с именем Value, я знаю, что MBINField (который здесь представляет собой текстовый текст) также имеет свойство Value, которое содержит экземпляр NMSString0x10.

фактически, как вы можете видеть, у меня есть событие, связанное с codebehind, которое имеет следующее.

private void Stringx10_MouseDown(object sender, MouseButtonEventArgs e)
{
        TextBlock tb = (sender as TextBlock);
        MBINField field = (tb.DataContext as MBINField);
        libMBIN.Models.Structs.NMSString0x10 c = field.Value as libMBIN.Models.Structs.NMSString0x10;
        tb.Text = c.Value;
}

и это прекрасно работает!

Это, очевидно, проблема с привязкой, но я не могу понять, что не так.

EDIT:

Нашел способ включить трассировку и заметил, в чем может быть проблема, хотя я не понимаю этого, я боюсь

    System.Windows.Data Warning: 108 : BindingExpression (hash=28048521):   At level 0 - for MBINField.Value found accessor ReflectPropertyDescriptor(Value)
System.Windows.Data Warning: 104 : BindingExpression (hash=28048521): Replace item at level 0 with MBINField (hash=51110099), using accessor ReflectPropertyDescriptor(Value)
System.Windows.Data Warning: 101 : BindingExpression (hash=28048521): GetValue at level 0 from MBINField (hash=51110099) using ReflectPropertyDescriptor(Value): NMSString0x10 (hash=46277382)
System.Windows.Data Warning: 108 : BindingExpression (hash=28048521):   At level 1 - for NMSString0x10.Value found accessor <null>

что level 1 - for NMSString0x10.Value found accessor <null> выглядит как возможная проблема, хотя я понятия не имею, что это значит

РЕДАКТИРОВАТЬ 2:

Я попытался написать конвертер значений, как предложено ниже, к сожалению, по какой-то причине он фактически никогда не используется (точки останова никогда не достигаются, преобразование никогда не происходит) Я даже пытался переключить тип поля в MBINField на динамический, а не на объект без какой-либо удачи .

На мой взгляд, код доказывает, что объект установлен правильно, это должно быть связано с неудачными соглашениями о связывании или что-то в этом роде.

1 Ответ

0 голосов
/ 24 августа 2018

Я хотел написать это в комментарии, но мне не хватает представителя.Не уверен, поможет ли это:

  • кажется (я не уверен, так как вы не опубликовали исходный код), что ваш MBINField.Value имеет тип объекта
  • , который делаетне имеет свойства Value

Что заставляет меня думать так:

  • в вашей трассировке, на уровне 0 найден метод доступа для MBINField.Value
  • на уровне 1 средство доступа не найдено, а именно: MBINField.Value.Value не существует
  • в вашем сообщении об ошибке указано: свойство 'Value' не найдено в 'object'

Если это предположение верно, возможное решение состоит в том, чтобы заменить тип MBINField.Value базовым классом, который имеет свойство Value, и заставить NMSString0x10 наследовать его.Другим решением было бы написать преобразователь значения , например,

...