2010-04-27 56 views
0

如何在我點擊BTNAddProvince時獲取Treeviewitem?在WPF中獲取TreeViewItem

在我的情況下父按鈕是stackpanel,我不能得到stackpanel的父(這是獲得節點的好辦法?)。

任何想法?

<HierarchicalDataTemplate DataType="{x:Type MyService:Region}" 
            ItemsSource="{Binding Path=ListOfProvinces}"> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=Name}"/> 
        <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" H:"/> 
        <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="{Binding Path=NumberOfHotels}"/> 
        <TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text=" "/> 
        <Button Name="BTNAddProvince" Height="20" Content="+" Click="BTNAddProvince_Click"></Button> 
       </StackPanel> 
         </HierarchicalDataTemplate> 

回答

1

我會建議你使用基於MVVM的設計爲您的TreeView(見http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx爲一個偉大的文章如何做到這一點)。然後將您的按鈕綁定到ViewModel的命令。這樣你就可以在項目的ViewModel上調用這個命令,然後你可以根據這個項目執行你的特定邏輯。

1

您可以通過這種方式獲得的TreeViewItem:

public New() 
{ 
    
    // This call is required by the designer. 
    InitializeComponent(); 
    
    _Items.Add(new Company { Name = "Company1", NumberOfHotels = 5 }); 
    _Items.Add(new Company { Name = "Company2", NumberOfHotels = 15 }); 
    _Items.Add(new Company { Name = "Company3", NumberOfHotels = 30 }); 
    
        
    tvItems.ItemsSource = _Items; 
} 

private void BTNAddProvince_Click(System.Object sender, System.Windows.RoutedEventArgs e) 
{ 
    
    Button button = sender as Button; 
    if (button == null) return;     
        
    TreeViewItem treeViewItem = GetVisualParent<TreeViewItem>(button); 
} 

public static T GetVisualParent<T>(Visual referencedVisual) where T : Visual 
{ 
    
    Visual parent = referencedVisual; 
    
    while (parent != null && !object.ReferenceEquals(parent.GetType, typeof(T))) { 
        parent = VisualTreeHelper.GetParent(parent) as Visual; 
    } 
    
    var parent1 = VisualTreeHelper.GetParent(referencedVisual); 
    
        
    return parent as T; 
} 
+0

object.ReferenceEquals(parent.GetType的typeof(T))< - 參數類型的方法組不分配給參數類型「對象' 並且你正在使用parent1? – user278618 2010-04-27 16:38:05

1
private void BTNAddProvince_Click(System.Object sender, System.Windows.RoutedEventArgs e) 
{  
    Button button = sender as Button; 
    Province p = button.DataContext as Province; 
    TreeViewItem item = treeView.ItemContainerGenerator.ContainerFromItem(p) as TreeViewItem;    
} 
+0

+1 treeView.ItemContainerGenerator.ContainerFromItem(p),正是我需要從綁定的數據項目中獲取treeviewitem,謝謝。 – RobJohnson 2013-01-08 13:45:00

相關問題