2015-09-02 47 views
0

我有與TreeViewItems一個TreeView,這ItemsSourceObservableCollection<MyClass>如何從ItemsSource中獲取項目以便雙擊TreeViewItem的子TextBlock?

var myList = new ObservableCollection<MyClass>(); 
TreeView treeView = new TreeView(); 
TreeViewItem treeViewItem = new TreeViewItem { 
    Header = headerStackPanel, 
    ItemsSource = myList 
}; 
treeView.Items.Add(treeViewItem); 

我怎樣才能得到的MyClass當雙擊對象對應的TextBlock?只有我所做的就是讓MyClass.ToString(),其專賣店在TextBlock.Text件事:

treeViewItem.MouseDoubleClick += (sender, args) => { 
    TextBlock tb = args.OriginalSource as TextBlock; 
    if (tb == null) { 
     return; 
    } 
    string myClassToString = tb.Text; 
}; 

另外:不是從XAML,從代碼。

回答

0

鑄造的TreeView的SelectedItemMyClass

treeViewItem.MouseDoubleClick += (sender, args) => { 
    if (yourTreeView.SelectedItem is MyClass) { 
     var myClass = yourTreeView.SelectedItem as MyClass; 
     //Do something with myClass. 
    } 
    //Additionally in this aproach you can 
    //check if selected item is TreeViewItem and get e.g. Header property. 
    else if (yourTreeView.SelectedItem is TreeViewItem) { 
     var treeViewItem = yourTreeView.SelectedItem as TreeViewItem; 
     string header = treeViewItem.Header; 
    }  
}; 

或以同樣的方式使用的TextBlockDataContext屬性:

treeViewItem.MouseDoubleClick += (sender, args) => { 
    TextBlock tb = args.OriginalSource as TextBlock; 
    if (tb == null) { 
     return; 
    } 
    else if (tb.DataContext is MyClass) { 
     var myClass = tb.DataContext as MyClass; 
     //Do something with myClass 
    }  
}; 
+0

儘管這可能是一個很好的答案,但請考慮增加一些關於爲什麼這是正確的解決方案以及你在做什麼的更多解釋:) –

0

你可以得到你的TextBlock的DataContext的。

+0

謝謝!現在我明白我的問題有多愚蠢。 – fut33v

+0

不客氣,不那麼傻不要擔心! – Giangregorio

相關問題