2012-03-02 4 views
2

В моем приложении WPF + MVVM у меня есть представление, в котором размещается другой пользовательский контроль. Детский пользовательский контроль не соответствует методу MVVM (потому что я просто размещаю там объект ActiveX Visio), поэтому я использую код за классом.Доступ к контексту данных дочернего пользователя в родительском

В представлении я использую этот код:

<uc:VisioControl Grid.Row="2" x:Name="visioControlUC" 
     VisioFileName="{Binding ElementName=tbFullFileName,Path=Text, UpdateSourceTrigger=PropertyChanged}"/> 

В том же виде, у меня есть элемент этикетки, где я хочу, чтобы отобразить значение поля DependencyProperty имени SelectedNodeCustomProperties, определенных на пользовательском элементе управления ребенком

<Label x:Name="lbNodeIdValue" DataContext="{Binding ElementName=visioControlUC}" Content="{Binding Path=SelectedNodeCustomProperties.Id, UpdateSourceTrigger=PropertyChanged}"/> 

Однако, это не работает. Запуск в режиме отладки, я могу видеть это связывающее исключение в окне Output:

BindingExpression path error: 'visioControlUC' property not found on 'object' ''NSDVizualizerViewModel' (HashCode=65573909)'. BindingExpression:Path=visioControlUC.SelectedNodeCustomProperties.NodeId; DataItem='NSDVizualizerViewModel' (HashCode=65573909); target element is 'Label' (Name=''); target property is 'Content' (type 'Object') 

Итак, почему это, что он ожидает, что пользовательский элемент управления ребенка определяется в ViewModel и как я могу установить DataContext пользователя при связывании содержимого метки?

Спасибо,

Адриан

EDIT: Для человека, который downvoted мой вопрос, может быть, вы можете объяснить, почему? Есть ли аналогичный вопрос на форуме, который я не нашел, может быть?

+0

именно - почему downvote? – chopikadze

ответ

1

Попробуйте

<Label x:Name="lbNodeIdValue" 
     Content="{Binding ElementName=visioControlUC, 
         Path=SelectedNodeCustomProperties.Id, 
         UpdateSourceTrigger=PropertyChanged}"/> 
+0

Я сделал. Он по-прежнему выдает исключение 'System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство SelectedNodeCustomProperties не найдено на 'объекте' '' RelativeSource '(HashCode = 51797270)'. BindingExpression: Path = SelectedNodeCustomProperties.NodeId; DataItem = 'RelativeSource' (HashCode = 51797270); целевым элементом является «Метка» (Name = ''); target is 'Content' (type 'Object') ' – Adrian

+0

Где находится' RelativeSource'? Вы использовали 'ElementName' в Binding или' RelativeSource'? – chopikadze

+0

Я использовал ELEMENTNAME '<Метка х: Name = "lbNodeIdValue" Content = "{Binding ElementName = visioControlUC, Path = SelectedNodeCustomProperties.Id, UpdateSourceTrigger = PropertyChanged}"/>' – Adrian