イベントの送信者は、treeviewitem 内のオブジェクトです。ただし、依存オブジェクトではないため、ItemFromContainer を使用して実際の TreeViewItem を取得できるとは思いません。選択されている実際のツリービュー項目を取得するにはどうすればよいですか?
私は、私が問題を抱えているのと同じように、誰もが私の質問に混乱しているように見えます。
リンクされたサイトによると、selecteditem プロパティから treeviewitem を取得できます。ただし、送信者が TreeViewItem ではなく SignalViewModel オブジェクトであるため、これを実行しようとすると null が返されます。
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>