Visual Studio сообщает об ошибке привязки, даже если привязка работает - PullRequest
0 голосов
/ 04 ноября 2010

В моем проекте я привязываюсь к XML-файлу. Есть несколько привязок: одна к textBox и одна к списку и одна к UserControl. Все кроме UserControl работает, но в выводе я получаю ошибку для всех 3 привязок, а не 2.

Ошибка выглядит так:

System.Windows.Data Ошибка: 43: BindingExpression с XPath не может привязка к не XML-объекту .; XPath = '/ datlg / @ TIMESTAMP' BindingExpression: Path = / InnerText; DataItem = 'XmlDataCollection' (HashCode = 199777); целевой элемент 'TextBlock' (Name = ''); целевое свойство это «Текст» (тип «Строка») XmlDataCollection: 'MS.Internal.Data.XmlDataCollection'

Мой текстовый блок выглядит так:

<TextBlock Margin="0" 
           Text="{Binding XPath=/datlg/@timeStamp}" 
           TextWrapping="Wrap"/>

А вот код для пользовательского элемента управления:

string xPath = String.Format("datlg/Devl/dev[@id='{0}']", id);
((XmlDataProvider)this.DataContext).XPath = xPath;
Binding b = new Binding();
b.Source = (XmlDataProvider)this.DataContext;
b.XPath = "prml/prm[@id='1']";
//b.Converter = (IValueConverter)this.Resources["IntToBoolConverter"];
b.Mode = BindingMode.OneWay;
//this.SetBinding(VacuumPumpControl.IsPoweredOnProperty, b);
testBox.SetBinding(TextBlock.TextProperty, b);

Примечание: для целей тестирования я временно привязал данные к textBox, чтобы проверить, работает ли привязка (например, установлен ли XPath на правильный и т. Д.). И он работает, если он связан с textBox, но не работает, если он связан с DP.

Комментируемые строки - это те, которые не работают.

И поскольку все (работающие и не работающие) привязки выдают ошибку, трудно понять, почему привязка моего пользовательского элемента управления не работает.

Есть идеи, почему все привязки дают ошибку и почему не работает привязка к DP внутри UserControl?

1 Ответ

4 голосов
/ 04 ноября 2010

Возможно, что ошибки просто из-за отложенной загрузки.Очень часто можно увидеть временные ошибки привязки данных.Вы можете попробовать добавить этот код, чтобы включить подробную информацию о привязке для этой конкретной привязки:

PresentationTraceSources.SetTraceLevel(b, PresentationTraceLevel.High);

Добавьте ее перед вызовом SetBinding.Попробуйте пошагово пройти по коду.Если вы видите сообщение об ошибке, которое вы описываете, в точке, в которой вы вызываете SetBinding, а затем, если вы нажмете F5, вы увидите загрузку большего количества сообщений привязки, особенно если оно включает событие DataChanged из XmlDataProvider, то это почти навернякапричина.

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

Что касается сбойного связывания, этоТрудно быть уверенным, не видя весь код, но это может быть связано с несоответствием типов.Если ваш IntToBoolConverter действительно ожидает целое число, он будет разочарован - источник данных XML всегда предоставляет значения в виде строк.Как выглядит ваш конвертер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...