我有一张表格:
<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
的{{1}}中。我不确定在单击按钮时从ItemsControl
获取数据的最佳方法是什么。我不能给出元素AutoCompleteBox
属性,因为它们在模板中(对吗?)。
我该如何解决这个问题? x:Name
事件会给我Click
,但我需要对文本框的引用。使用Button的父级,然后查看子项的文本框?如果我将其考虑在自己的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
,因此我无法使用代码隐藏中的名称来访问它。我怎么能这样做?
答案 0 :(得分:0)
您可以向演示者添加一个属性,比如说SelectedItemInAutoCompleteBox
,然后可以使用SelectedItem
将其绑定到AutoCompleteBox
Mode=TwoWay
属性,如下所示,
<sdk:AutoCompleteBox SelectedItem="{Binding Path=DataContext.SelectedItemInAutoCompleteBox, Mode=TwoWay}" ... />
您也可以使用Text
AutoCompleteBox
属性尝试相同的方法。看看它是否解决了你的问题。: - )
答案 1 :(得分:0)
您有多种选择:
如果您使用的是Silverlight 5,请使用AncestorBinding
否则,请使用Silverlight 4 AncestorBinding hack(看起来不太漂亮)
或者您可以尝试DataContextProxy,它将DataContext存储在资源中以便可以访问。注意:您应该将DataContextProxy设置为topicList ListBox的资源,而不是Dan Wahlin示例中的UserControl。