C# TreeView';对象绑定到另一个视图

C# TreeView';对象绑定到另一个视图,c#,.net,wpf,C#,.net,Wpf,我需要在下面列出的一个应用程序中实现一个要求。我有一个疑问,如何在WPF中实现这一点 我有一个主WPF窗口,它在左侧分为树状视图,在右侧有一些文本框、组合框和复选框 我想用存储在树节点标记值中的对象的相应值填充右侧表单 每当我单击树状视图上的特定节点时,右侧的表单字段都会在其标记值中显示对象存储的内容,如果我在右侧表单字段中进行一些修改,这些内容最终将被更新 有人能给一个链接到示例应用程序吗 您的问题涉及WPF中的一个非常基本的概念,即。请从这篇文章开始 请注意,将感兴趣的/可编辑的对象放入Tr

我需要在下面列出的一个应用程序中实现一个要求。我有一个疑问,如何在WPF中实现这一点

  • 我有一个主WPF窗口,它在左侧分为树状视图,在右侧有一些文本框、组合框和复选框

  • 我想用存储在树节点标记值中的对象的相应值填充右侧表单

  • 每当我单击树状视图上的特定节点时,右侧的表单字段都会在其标记值中显示对象存储的内容,如果我在右侧表单字段中进行一些修改,这些内容最终将被更新


  • 有人能给一个链接到示例应用程序吗

    您的问题涉及WPF中的一个非常基本的概念,即。请从这篇文章开始

    请注意,将感兴趣的/可编辑的对象放入
    TreeViewItem
    Tag
    属性中对于UI设计来说是一个非常糟糕的主意。
    标记
    属性很容易从代码中访问,但是从UI绑定到-all将非常困难/复杂,因为
    树视图
    本身只公开一个
    SelectedItem/SelectedIndex
    属性,该属性通常返回数据项,而不是
    树视图项

    请使用以下示例:

    <StackPanel Orientation="Horizontal">
        <TreeView x:Name="twi">
            <TreeViewItem Tag="one" Header="111">
                <TextBlock Text="First" />
            </TreeViewItem>
            <TreeViewItem Tag="two" Header="222">
                <TextBlock Text="Second" />
            </TreeViewItem>
            <TreeViewItem Tag="three" Header="333">
                <TextBlock Text="Third" />
            </TreeViewItem>
        </TreeView>
        <StackPanel Orientation="Vertical">
            <TextBlock Text="The text:" />
            <TextBlock Text="{Binding ElementName=twi, Path=SelectedItem}" />
            <TextBlock Text="{Binding ElementName=twi, Path=SelectedItem.Tag}" />
            <TextBlock Text="{Binding ElementName=twi, Path=SelectedItem.Tag.Name}" />
            <TextBlock Text="{Binding ElementName=twi, Path=SelectedItem.Tag.Surname}" />
        </StackPanel>
    </StackPanel>
    
    当然,创建一些示例数据并将其作为其ItemsSource提供给treeView。 这样,TreeView将自动创建项目,应用模板,并且每次单击SelectedItem时,SelectedItem不会为您提供
    TreeView项目
    s,而是提供可直接编辑的-with
    Person
    。因此,在窗口的右侧,简单绑定到
    SelectedItem.Name
    将“正常工作”,如果设置为双向,它将直接更新此人


    免责声明:我没有运行代码。可能有错误和打字错误。代码只是为了展示总体思路。

    你好,Quetzalcatl,感谢您提供这么好的示例。将对此进行测试并接受作为答案。
    public class Person
    {
        // properties
        public string Name { .... }
        public string Surname { ... }
    
        public List<Person> Subordinates { .... }
    }
    
    <StackPanel Orientation="Horizontal">
        <TreeView x:Name="twi">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Subordinates}">
                    <TextBlock>
                        <Run Text="{Binding Name}" />
                        <Run Text=" " />
                        <Run Text="{Binding Surname}" />
                    </TextBlock>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    
        <StackPanel Orientation="Vertical">
            <TextBlock Text="The selected person:" />
            <TextBox Text="{Binding ElementName=twi, Path=SelectedItem.Name, Mode=TwoWay}" />
            <TextBox Text="{Binding ElementName=twi, Path=SelectedItem.Surname, Mode=TwoWay}" />
        </StackPanel>
    </StackPanel>