【发布时间】:2013-08-14 10:03:51
【问题描述】:
事件的发送者是treeviewitem中的对象。但是,它不是一个依赖对象,所以我认为我不能使用 ItemFromContainer 来获取实际的 TreeViewItem。我应该怎么做才能获得被选中的实际树视图项?
我发现每个人都对我的问题感到困惑,就像我对我的问题一样。
根据链接的站点,我可以从 selecteditem 属性中获取我的 treeviewitem。但是,当我尝试这样做时,我会得到 null,因为发件人是 SignalViewModel 对象而不是 TreeViewItem。
TreeViewItem treeViewItem = this.AvailableSignalsTreeView.SelectedItem as TreeViewItem;
这为我返回 null,但调试器显示所选项目的类型为 SignalViewModel。
我想要做的只是获得树视图的多选功能,我将使用我看到的一个示例来执行此操作,该示例只是切换树视图项。
<TreeView
Grid.Row="0"
Background="Blue"
Foreground="Orange"
x:Name="AvailableSignalsTreeView"
SelectedItemChanged="AvailableSignalsTreeView_SelectedItemChanged"
ItemsSource="{Binding Source={StaticResource available_signals_source}}"
>
<TreeView.CommandBindings>
<CommandBinding Command="ApplicationCommands.SelectAll"
Executed="AvailableSignalsTreeView_SelectAll"
CanExecute="AvailableSignalsTreeView_SelectAllCanExecute"/>
</TreeView.CommandBindings>
<TreeView.InputBindings>
<KeyBinding
Command="ApplicationCommands.SelectAll"
Modifiers="Ctrl"
Key="A"
/>
</TreeView.InputBindings>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource ="{Binding Path = bits}" >
<TextBlock
Text="{Binding Path = SignalName}"
/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Path = BitNumber}"
/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem Header="Add Bits to Signal" Click="AddBitToSignal" />
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
【问题讨论】:
-
你想要这样的东西:
var item = e.OriginalSource as TheItemYouExpect。在 TheItemYouExpect 中你可以输入Image,Button,无论你期望的项目是什么。希望我能理解你的问题。 -
TreeView.SelectedItem? msdn.microsoft.com/en-us/library/…