Правильная установка RelativeSource - PullRequest
1 голос
/ 12 сентября 2011

У меня есть поле со списком в форме xaml (MainWindow).

Я установил для источника Items ObservableCollection в коде позади. Чтобы заполнить поле со списком, я использовал Relative Source (он находится внутри ItemsControl), который отлично работал (без него, если не заполнялся):

ItemsSource="{Binding SelectableItems, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"

Теперь я выделил ObservableCollection в отдельный класс модели представления с именем MainWindowViewModel, поле со списком не заполняется.

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

Как мне создать RelativeSource, чтобы поле со списком заполнялось?

Спасибо

Джо

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Вы больше не хотите использовать RelativeSource. Если вы не укажете RelativeSource (или Source, или ElementName), то привязка разрешится относительно текущего DataContext. Поскольку DataContext наследуется, ваш ItemsControl получает его DataContext от родителя Window. Таким образом, эта привязка будет разрешена для вашей модели представления.

ItemsSource="{Binding SelectableItems}"
1 голос
/ 12 сентября 2011

Мне нужно было добавить Путь в конце, таким образом:

ItemsSource="{Binding SelectableItems, RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=DataContext.SelectableItems}"
...