c# - 在 SelectedItemChanged 事件中更改 WPF TreeView SelectedItem

标签 c# wpf xaml treeview

我目前有一个结构如下的 WPF Treeview:

--> Group 1 (Hierarchical Group)
   ---> Group 2 (Hierarchical Group)
      ---> Item 1
      ---> Item 2
      ---> Item 3

我目前有一个 SelectedItemChanged 事件处理程序连接到此 TreeView

private void TreeViewControl_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{

     if (e.NewValue is Item)
     {
         Item item = e.NewValue as Item;
         if (Item != SelectedItem)
         {
             //keep SelectedItem in sync with Treeview.SelectedItem
             SelectedItem = e.NewValue as Item;
         }

     }
     else
     {
         //if the user tries to select an object that isn't an Item (i.e. a group) reselect the first Item in that group
         //This will then cause stack overflow in methods I've tried so far
     }
}

所以我的问题是,如何使 TreeView 的 SelectedItem 与我后面代码中的 SelectedItem 属性保持同步,以及如果用户选择了一个组,我如何重新选择一个项目?

编辑:

    <TreeView Grid.Row="1" Grid.RowSpan="2"
              ItemContainerStyle="{StaticResource StandardListStyle}"
              ItemTemplate="{StaticResource TreeViewItemTemplate}"
              BorderThickness="1,0,1,1"
              VerticalContentAlignment="Stretch"
              HorizontalAlignment="Stretch"
              ItemsSource="{Binding Teams}"
              SelectedItemChanged="TreeViewControl_SelectedItemChanged"
              Loaded="OnTreeViewLoaded"
              x:Name="TreeViewControl">

哪里:

Teams = List<HierachicalGroup>;

在哪里:

public class HierachicalGroup
{
    public virtual string Name { get; set; }
    public virtual HierachicalGroup[] Children { get; set; }
    public virtual HierachicalGroup Parent { get; set; }
}

项目是:

public class Item: HierachicalGroup
{
    public Domain Domain { get; set; }

    public override string Name
    {
        get
        {
            return Domain.DomainName;
        }
    }
}

最佳答案

在 TreeView.SelectedItemChanged 事件中,我们得到 e.NewValue,它是 TreeViewItem 的类型,因此我认为您可以使用以下代码在选择项目组时选择项目。

var item = (e.NewValue as TreeViewItem);
if (item.Items.Count > 0)
{
    (item.Items[0] as TreeViewItem).IsSelected = true;
}

关于c# - 在 SelectedItemChanged 事件中更改 WPF TreeView SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24756011/

相关文章:

c# - 如何在函数应用程序中测试函数级别授权以进行本地开发?

c# - .NET中是否有类似于Qt::QueuedConnection的东西?

调整其父窗口大小时的 WPF GridSplitter 行为

c# - 如何验证 Guid 数据类型?

c# - 检测Canvas上的两个控件是否发生碰撞

wpf - 将 CollectionViewSource 与 TabControl 结合使用

c# - 比较定时器和 DispatcherTimer

c# - Websocket 服务器最大并发连接 C#

c# - 将数据行添加到预定义索引处的数据表

xaml - 使用扩展面板平等地拉伸(stretch)所有 child