В моей MainWindow, у меня есть ListBox
чей ItemsSource
привязан к ObservableCollection
из Layout
POCO объектов:Родитель-Ребенок внутри DataTemplate
<ListBox x:Name="ListBox" ItemsSource="{Binding Layouts}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Кроме того, в MainWindow, мы определяем визуальное представление Макет объекта с использованием UserControl
(LayoutUserControl):
<DataTemplate DataType="{x:Type local:Layout}">
<local:LayoutUserControl />
</DataTemplate>
При добавлении объектов в коллекции макетов, мы видим новые LayoutUserControls заполнения ListBox. Это довольно прямолинейно.
Теперь, что бы я хотел сделать, как-то обменивается данными с MainWindow на отдельные LayoutUserControls. В частности, из MainWindow я хочу вызвать один метод для каждого из LayoutUserControls ... Если я попытаюсь выполнить итерацию в коллекции Items ListBox, все, что я получаю, это ссылка на объекты Layout, а не LayoutUserControls. Поскольку LayoutUserControls определены в DataTemplate, у меня нет именованной ссылки для доступа к ним ...
Есть ли конструкция WPF, поддерживающая этот тип взаимодействия от родительского элемента к дочерним элементам управления? Первоначальная мысль RoutedEvents была моей, но они поддерживают только связь с родителями (пузырьками). Может быть, командование - это путь?
Любая помощь будет оценена по достоинству.
Спасибо!
Спасибо за оперативную обратную связь. Я хотел бы держаться подальше от регистрации «старой школы», если это возможно. Я довольно уверен, что могу предоставить простой ICommand в LayoutUserControl. Как я могу привязать его и вызвать его из MainWindow? Любые ссылки или примеры, которыми вы можете поделиться? –
@JohnRussell: Ну, команды обычно относятся к данным, и то, что вы хотите, это данные для ui, поэтому использование старого школьного мероприятия было бы намного проще, на мой взгляд. Использование команд наверняка может работать так или иначе, но я не могу дать хороший метод сразу с места в карьер, но я тоже буду изучать его ... –
Ah. Теперь, я думаю, я вижу, куда вы идете ... Исправьте меня, если я ошибаюсь. Я могу добавить метод к объекту Layout, назовите его OnRaiseEvent(). Он будет вызываться из моего MainWindow для каждого из макетов в коллекции. Внутри объекта Layout OnRaiseEvent поднимет событие для LayoutUserControl для выполнения моей задачи. Это то, что вы говорите? –