WPF:通过(分层)数据模板获取对象可视化对象

时间:2011-08-09 09:33:44

标签: wpf data-binding datatemplate

我有一个TreeView,里面有几个项目。这些项目通过简单的分层数据模板可视化,如下所示:

<HierarchicalDataTemplate x:Key="instanceTemplate">
  <CheckBox Checked="InstanceCheckChanged" Unchecked="InstanceCheckChanged">
    <Label>Hello World!</Label>
  </CheckBox>
</HierarchicalDataTemplate>

正如您所看到的,我添加了一个事件处理程序,这里是后面的代码:

private void InstanceCheckChanged(object sender, RoutedEventArgs e)
{
  CheckBox checkBox = (CheckBox)sender;
}

在此事件处理程序中,事件的发件人显然是复选框本身,但复选框实际上是可视化我的普通对象。我的问题是,如何获得复选框可视化的对象?我希望有一个带有这样签名的方法:

public MyObject GetMyObject(UIElement sender);

这是否可以在WPF中使用,或者是否有一种干净的方式来存储一些元数据,以便我知道检查了哪个MyObject?

1 个答案:

答案 0 :(得分:1)

你的CheckBox的DataContext将是它所代表的对象:

var myObject = ((CheckBox)sender).DataContext as MyObject;