Помогите с ошибкой пути при привязке данных к свойству зависимости экземпляра класса - PullRequest
1 голос
/ 18 мая 2011

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

UserControl XAML выглядит в основном так, как показано ниже.Это не работает и выдает PathError, когда я проверяю статус.

<UserControl>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource BusinessObject}}">
    <ListBox x:Name="DocumentDisplay" ItemContainerStyle="{DynamicResource ContainerStyle}" ItemsSource="{Binding Instance.ActiveDocument, Path=Paragraphs}" />
</Grid>
</UserControl>

Я проверил в коде C # и подтвердил следующее:

  1. DataContext является правильным и ненулевым.
  2. Свойство установлено и также не равно нулю.

Однако, I могу успешно создать привязку с помощью C #:

    var dogPargBinding = new Binding() { Source = BusinessObjectClass.Instance.ActiveDocument, Path = new PropertyPath("Paragraphs") };
    this.DocumentDisplay.SetBinding(ListBox.ItemsSourceProperty, dogPargBinding);

Несмотря на то, что это работает, я хотел бы, чтобы привязка работала из XAML, потому что большая часть нашей разработки выполняется с помощью Expression Blend.

Еще несколько подробностей о нашей реализации:

  1. Просто повторюсь, этот же паттен работал во многих других местах кода.
  2. ActiveDocument является свойством зависимостиBusinessObjectClass, и он устанавливается из мульти-привязки, созданной в коде C #.Тестирование показывает, что это свойство установлено правильно.

Я уверен, что есть простое объяснение того, что мы делаем неправильно, но сейчас дело дошло до того, что пришло время спрашивать.Заранее спасибо.

========================================================================================

Я наконец нашел проблему, которую яиметь.DependencyProperty был объявлен с неправильным типом класса владельца.Это все испортило, и ничего VS не привело меня к ответу быстро.

Самый полезный ответ был удален ...: (

1 Ответ

2 голосов
/ 18 мая 2011

Ваша привязка неверна. У вас есть {Binding Instance.ActiveDocument, Path=Paragraphs}, который дважды устанавливает свойство Path.

Часть Instance.ActiveDocument не определяет свойство перед ним, поэтому она будет использовать конструктор Binding , который задает путь привязки.

Затем вы устанавливаете свойство Path, фактически перезаписывая значение, переданное конструктору.

Я думаю, вы хотите использовать {Binding Path=Instance.ActiveDocument.Paragraphs}. Поскольку ваш DataContext является экземпляром BusinessObjectClass, этот путь будет искать для него свойство Instance. Затем он будет искать свойство ActiveDocument для объекта, возвращенного из свойства Instance. И наконец, найдите свойство Paragraphs для объекта, возвращенного из свойства ActiveDocument.

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