2011-07-14 99 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