在我的主视图中,我有一个ItemsControl,它绑定到一组对象:
<ItemsControl ItemsSource="{Binding Path=Concepts}"
ItemTemplate="{StaticResource ActivationLevelTemplate}"
/>
ActivationLevelTemplate只是另一个视图:
<DataTemplate x:Key="ActivationLevelTemplate">
<view:ConceptActivationView Height="50"/>
</DataTemplate>
在此视图中,有一个文本块,绑定到上述集合中对象的属性。该属性显示正确,现在我需要从视图的代码后面访问同一对象的其他属性。这似乎微不足道,但我无法让它发挥作用。
<TextBlock Text="{Binding Path=Name}"
HorizontalAlignment="Center"
/>
<d3:Plotter2D Name="Plotter"/>
我遇到的最好的事情是ItemContainerGenerator
,但似乎并不需要。
答案 0 :(得分:5)
重要的是您尝试访问该对象的上下文。例如,如果您处理DataTemplate中的事件,您可以轻松地从发送方的DataContext获取对象(必须是FrameworkElement),例如,如果我要处理按钮点击:
private void Button_Click(object sender, RoutedEventArgs e)
{
var button = (FrameworkElement)sender;
var employee = (Employee)button.DataContext;
//...
}
事实上,如果你的整个视图都在DataTemplate中,你也可以直接从View的DataContext中获取对象。
答案 1 :(得分:1)
您应该能够遍历ItemsControl中的项目并获取所需的所有属性。为ItemsControl指定一个名称,以便在后面的代码中解决它:
<ItemsControl Name="itemsControl" ... />
然后在代码背后
foreach (YourItem item in itemsControl.Items)
{
// your logic...
}
如果您需要特定项目,可以尝试使用CurrentItem或GetItemAt()
itemsControl.Items.CurrentItem
// or
itemsControl.Items.GetItemAt()