1

我有一个带有两个使用控件的窗口。一个封装了一个 TreeView 控件,另一个只是一个选定的 TreeViewItems 详细信息的字符串表示形式。

TreeView 控件已经是自给自足的——它会用内容项填充自己。每个 TreeViewItem 都有一个数据上下文。

这是我需要发生的事情:

  1. 每当用户单击一个项目时,它都会生成一个 Selected 路由事件,该事件在我的窗口的根容器中被捕获。
  2. 我需要事件处理程序,它处理选定的路由事件,以便能够从选定的 TreeViewItem 的数据上下文中获取一些数据(属性值)。
  3. 基于这个值,我的事件处理程序将创建一个 DetailsView 控件并用数据填充它。

在处理 Selected 事件方面,我的方法是否正确?如何从我的选定项目数据上下文中获取属性值?

谢谢你。

4

1 回答 1

0

将属性绑定到 TreeView 的 SelectedItem 可以解决您的问题。下面的代码表达了我正在考虑的内容。对于您拥有的两个 UC,您可以为 SelectedItem 公开一个属性。

XAML:

<TreeView x:Name="Tree1">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Items}">
            <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
<TextBlock Text="{Binding ElementName=Tree1,Path=SelectedItem.Name}" />

物品实体

public class Item
{
    public event PropertyChangedEventHandler PropertyChanged;
    private string name;
    private Collection<Item> items;

    public Collection<Item> Items { get { return items; } }

    public Item()
    {
        items = new Collection<Item>();
    }

    public string Name
    {
        get { return name; }
        set { name = value; OnPropertyChanged("Name"); }
    }

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

绑定源

Item item = new Item { Name = "A" };
item.Items.Add(new Item { Name = "A_1" });
item.Items.Add(new Item { Name = "A_2" });
item.Items.Add(new Item { Name = "A_3" });
Tree1.ItemsSource = new Collection<Item>() { item };
于 2011-04-25T04:52:36.943 回答