У меня есть форма:
<StackPanel Orientation="Horizontal" Visibility="{Binding Editable, Converter={StaticResource visibilityConverter}}"
ToolTipService.ToolTip="Add new topic to this group">
<sdk:AutoCompleteBox Width="160" ItemsSource="{Binding ElementName=LayoutRoot, Path=DataContext.TopicNames}" />
<Button Click="addTopicButton_Click">
<Image Source="Images/appbar.add.rest.png" />
</Button>
</StackPanel>
Эта форма появляется в DataTemplate
для ItemsControl
. Я не уверен, что лучший способ получить данные из AutoCompleteBox
при нажатии кнопки. Я не могу дать атрибуты x:Name
элементов, потому что они в шаблоне (верно?).
Как я могу обойти это? Событие Click
даст мне Button
, но мне нужна ссылка на текстовое поле. Используйте родителя кнопки, затем просмотрите дочерние элементы для текстового поля? Если бы я учел это в своих UserControl
, я мог бы установить значения x:Name
, но я бы не стал этого делать.
Есть еще идеи?
Обновление : Вот еще один пример такой проблемы:
<ListBox x:Name="topicList"
ItemsSource="{Binding Id, Converter={StaticResource topicGroupIDConverter}}"
SelectionChanged="ListBox_SelectionChanged"
HorizontalAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"
Width="150"
VerticalAlignment="Center"
ToolTipService.ToolTip="{Binding Description}"
ToolTipService.Placement="Right" />
<Button ToolTipService.ToolTip="Remove this topic from this group"
Visibility="{Binding ElementName=topicList,
Path=DataContext.Editable,
Converter={StaticResource visibilityConverter}}"
Click="removeTopicButton_Click"
HorizontalAlignment="Right"
Margin="10,0">
<Image Source="Images/appbar.cancel.rest.png" />
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Когда кнопка нажата, я хочу получить доступ к topicList.DataContext
. Однако topicList
сам по себе является DataTemplate
в ItemsControl
, поэтому я не могу получить к нему доступ, используя его имя из кода кода. Как еще я могу это сделать?