#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.