2010-04-27 3 views
0

BTNAddProvince에서 클릭 할 때 Treeviewitem을 얻는 방법은 무엇입니까?WPF에서 TreeViewItem 가져 오기

내 경우 버튼의 부모는 스택 패널이며 스택 패널의 부모를 얻을 수 없습니다 (노드를 얻는 좋은 방법입니까?).

아이디어가 있으십니까?

<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

난 당신이 (이 작업을 수행하는 방법 좋은 기사 http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx 참조) 트 리뷰에 대한 MVVM 기반 설계를 사용하는 것이 좋습니다 것입니다. 그런 다음 버튼을 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

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

관련 문제