2011-07-14 65 views
1

我目前正在研究一个项目,该项目将以分层方式显示某个日期。我正在使用一个Tree(List)视图(来自Ricciolo的视图),它有3个层级。 TLV的ItemsSource是一个List。如何获取树(列表)查看项目的父项?

1st level = typeof(Game) 
2nd level = typeof(Partner) 
3rd level = typeof(Channel) 

一切都显示正常,但现在我有一个问题。我想为选定的项目启动编辑模式,但因此有必要查明所选项目是否和哪些父项。 我已经尝试以下方法:

TreeViewItem myItem = e.OriginalSource as TreeViewItem; 
if (myItem != null) { 
    ItemsControl parent = ItemsControl.ItemsControlFromItemContainer(myItem); 
    if (parent != null) { 
    //Put your logic here. 
    } 
} 

这里的问题是,无论我选择哪个项目,“myItem”永远是零。

请问有人可以指点我正确的方向吗?

Thx提前,问候

回答

0

您使用使用as所以e.OriginalSource不是TreeViewItem安全铸,设置断点,并使用调试器,看看它是什么。

+0

这正是我的问题。 e.OriginalSource必须是三种可能性之一。游戏,合作伙伴或渠道,这是没有问题的发现。我不想知道当前选择哪个项目,但哪个项目是当前选定项目的父项目。 – Schlurb

+0

你的'发件人'是什么?这不应该是与视觉表现有关的控制吗? –

+0

**发件人**是我的TreeListView控件。我的问题是,我不知道如何“走出”视觉树,因为他们使用依赖对象作为参数。 – Schlurb

2

你真的应该在你的应用程序中使用MVVM模式。请参阅this article以获得很好的介绍,特别是在树视图的情况下。

目前,codeproject似乎有问题。您可以访问文章中的google cache

1

根据您处理这些事件(MOUSEBUTTONDOWN?)的e.OriginalSource很可能含有引发事件(可能是TextBlock)的TreeViewItem内的控制。您可能需要使用VisualTreeHelper来查找封闭的容器(TreeViewItem)。

0

试着让父母使用VisualTreeHelper。

+0

我一定是笨蛋。我在尝试以下方法:DependencyObject parent = VisualTreeHelper.GetParent(Name1); Name1将是“合作伙伴”或“频道”类型。但是“GetParent”方法需要依赖对象作为参数。如何解决这个问题? – Schlurb

+0

你可以通过你的treeviewitem – Manish

+0

如果我尝试:DependencyObject parent = VisualTreeHelper.GetParent(_myTreeView.SelectedItem); ...它不起作用。我收到以下消息:_ System.Windows.Media.VisualTreeHelper.GetParent(System.Windows.DependencyObject)的最佳重载方法匹配 - 方法有一些无效参数_。 – Schlurb