【发布时间】:2014-01-18 17:35:03
【问题描述】:
我正在学习 WPF,但我认为我在用户控件方面缺少一些东西。我将尝试通过示例进行演示。基本上,假设我有一个树视图,并且我想将标签文本绑定到树视图 selectedItem。这看起来很简单:
<!-- Window.xaml -->
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<TreeView Name="MyTreeView">
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1"></TreeViewItem>
<TreeViewItem Header="Item2"></TreeViewItem>
</TreeViewItem>
</TreeView>
<Label Content="{Binding ElementName=MyTreeView, Path=SelectedItem.Header}" Grid.Row="1"></Label>
</Grid>
现在,为了使事情复杂化,我将添加一个用户控件。用户控件基本上是网格中的 TreeView:
<!-- ExampleUserControl.xaml -->
<UserControl>
<Grid>
<TreeView Name="UserControlTreeView">
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1"></TreeViewItem>
<TreeViewItem Header="Item2"></TreeViewItem>
</TreeViewItem>
</TreeView>
</Grid>
</UserControl>
目的是用用户控件替换上面使用的香草树视图,并根据选择的内容更改标签内容。所以,我尝试这样的事情:
<Window>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<local:ExampleUserControl1 x:Name="MyUserControl">
</local:ExampleUserControl1>
<Label Content="{Binding ElementName=MyUserControl, Path=SelectedItem.Header}" Grid.Row="1"></Label>
</Grid>
</Window>
这会编译并运行,但是当我在树视图中选择项目时,标签不会改变。我想我明白为什么:用户控件包含树视图,但显然不是树视图。我不确定解决此问题的最佳方法。我能想到一种似乎有问题的方法:
- 在代码中向用户控件添加属性“SelectedItem”,以返回树视图中的选定项。
这适用于一个或几个属性,但是为树视图中的每个属性执行此操作的想法似乎严重浪费了代码和时间。有什么方法可以继续使用用户控件,但让它表现得像一个普通的 TreeView?
【问题讨论】:
标签: c# wpf xaml user-controls treeview