Получение TreeViewItem в WPF - PullRequest
       18

Получение TreeViewItem в WPF

0 голосов
/ 27 апреля 2010

Как получить Treeviewitem, когда я нажму на BTNAddProvince?

В моем случае родителем кнопки является 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>

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Вы можете получить 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;
}
1 голос
/ 24 июля 2010
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;            
}
1 голос
/ 27 апреля 2010

Я бы посоветовал вам использовать дизайн на основе MVVM для TreeView (см. http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx для отличной статьи, как это сделать). Затем свяжите свою кнопку с командой ViewModel. Таким образом, вы вызовете команду для ViewModel элемента, где затем сможете выполнить свою конкретную логику на основе элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...