Xaml не может найти привязку

#silverlight #silverlight-4.0 #mvvm

#silverlight #silverlight-4.0 #mvvm

Вопрос:

У меня есть страница, на которой есть три дочерних пользовательских элемента управления. Я установил ресурс DataContext viewmodel на родительской странице, и три дочерних элемента управления ссылаются на родительский DataContext, потому что все 3 дочерних пользовательских элемента управления используют один и тот же ViewModel. Все хорошо.

Однако у одного из пользовательских контроллеров возникают проблемы с привязкой (я вижу это из-за новой функции отладки XAML в Silverlight 5 Beta.) Пользовательский элемент управления, о котором идет речь, является ItemsControl. Внутри каждого элемента находится кнопка и 2 текстовых поля. Эта кнопка привязана к команде. Ошибка заключается в том, что кнопка не может найти свою привязку. 2 текстовых поля привязаны правильно. ItemSource элемента ItemsControl привязан к ObservableCollection в viewmodel.

Мой вопрос заключается в следующем: Как я могу указать кнопке искать ее привязку «на более высоком уровне», чем наблюдаемая коллекция, т.Е.: Перейдите к модели представления, а не к вашему непосредственному родителю (наблюдаемая коллекция). Вы не можете установить DataContext для кнопки в ChildControl , потому что ссылки на модель представления там нет. Это в родительском файле.

Комментарии:

1. Вы упомянули Silverlight 5, но вы отметили Silverlight 4, на который вы ориентируетесь, в данном случае это имеет значение.

Ответ №1:

Попробуйте это:-

Дайте вашему ItemsControl имя. При включении привязки кнопки ElementName=NameOfItemsControl префикс пути привязки с DataContext. .

Ответ №2:

Вы должны иметь возможность использовать привязку RelativeSource для доступа к вашей viewmodel

 {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}, 
         Path=DataContext.MyButtonCommand}
  

Комментарии:

1. ХОРОШО — попробовал это, и XAML показывает ошибку пространства имен в AncestorType={x: Type ItemsControl}, в которой говорится, что ссылка на сборку отсутствует в x: Type. Вы знаете, в какой сборке это находится?

2. Согласно документации, это в PresentationFramework. dll, на которую уже есть ссылка на моей странице: xmlns =» schemas.microsoft.com/winfx/2006/xaml/presentation »

3. Полные ошибки таковы: (1) Свойство ‘AncestorType’ не существует для типа ‘RelativeSource’ в пространстве имен XML ‘ schemas.microsoft.com/winfx/2006/xaml/presentation ‘(2) Свойство ‘AncestorType’ не было найдено в типе ‘RelativeSource'(3) Тип ‘x:Type’ не был найден. Убедитесь, что у вас не пропущена ссылка на сборку и что все сборки, на которые даны ссылки, были собраны.

4. Только что переключился на использование платформы Silverlight 5 в моем проекте, и теперь синтаксис выглядит удовлетворительно, хотя я не могу протестировать, потому что все мои гиперссылки и кнопки теперь отключены!!!

Ответ №3:

С тех пор я перенес все свои проекты SL5 обратно в SL4. Новая функция отладки XAML в SL5 работала не более нескольких дней и теперь постоянно отключена, выдавая ошибки о невозможности найти PDF-файлы. Я бы посоветовал всем, кто разрабатывает большие проекты, держаться подальше от SL5, пока он не будет протестирован, иначе вы в конечном итоге потратите огромное количество времени, пытаясь проанализировать странные ошибки, которые выдает SL5.