我想为TreeView创建一个ContextMenu . TreeView XAML:
<helper:ExtendedTreeView Grid.Row="5" ItemsSource="{Binding OCFrage, Mode=TwoWay}" SelectedItem_="{Binding SelectedItem, Mode=TwoWay}" SelectedItemChanged="treeView1_SelectedItemChanged" x:Name="treeView1" Height="205" Width="215">
<helper:ExtendedTreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type model:T_Frage}" ItemsSource="{Binding Wertung, Mode=TwoWay}">
<TextBlock Text="{Binding Text}"/>
</HierarchicalDataTemplate>
</helper:ExtendedTreeView.Resources>
</helper:ExtendedTreeView>
帮助者:ExtendedTreeView是这个类:
public class ExtendedTreeView : TreeView
{
public ExtendedTreeView()
: base()
{
this.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(self);
}
void self(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (SelectedItem != null)
{
SetValue(SelectedItem_Property, SelectedItem);
}
}
public object SelectedItem_
{
get { return (object)GetValue(SelectedItem_Property); }
set { SetValue(SelectedItem_Property, value); }
}
public static readonly DependencyProperty SelectedItem_Property = DependencyProperty.Register("SelectedItem_", typeof(object), typeof(ExtendedTreeView), new UIPropertyMetadata(null));
}
我正在使用它来绑定SelectedItem并在我的ViewModel中使用它 .
我的TreeView有“ Headers ”,类型为T_Frage,它们的节点类型为T_Wertung,所以它会是
-
T_Frage
-
T_Wertung
-
T_Wertung
-
T_Frage
-
T_Wertung ......
我想为Headers创建一个ContextMenu . 因此,如果用户单击类型为T_Frage的TreeViewItem,则应弹出ContextMenu . 我已按照本指南http://canhandre.wordpress.com/2012/01/14/wpf-treeview-with-contextmenu/进行操作,目前我在CodeBehind中进行测试 . 问题是当执行此代码时: TreeViewItem selectedItem = treeView1.SelectedItem as TreeViewItem;
treeView1.SelectedItem的类型为T_Frage并且具有它的值,但是当我分配给selectedItem时,selectedItem仍为null ...为什么?
编辑:删除ItemsSource并在XAML中创建普通的TreeViewItems
<TreeViewItem Header="Edit" Name="Edit">
<TreeViewItem Header="Text"/>
<TreeViewItem Header="Image"/>
<TreeViewItem Header="Table"/>
</TreeViewItem>
将在此处分配值 TreeViewItem selectedItem = treeView1.SelectedItem as TreeViewItem;
. 这意味着我无法将TreeView中的Item(类型为T_Frage)分配给TreeViewItem类型的变量 . 我应该如何为TreeView中的Item创建一个ContextMenu,它不是TreeViewItem类型的?您可以在上面看到,将T_Frage的类型分配给TreeViewItem将导致为null .
1 回答
我知道它现在是MVVM而不是CodeBehind,但我只想先在CodeBehind中测试它,然后在MVVM中完成所有操作,因为我认为在MVVM中立即执行它会更难......无论如何,这就是我想要的:
视图模型:
由于我'm binding to the SelectedItem of the TreeView, I can ask if the SelectedItem is of type T_Frage. If it'是真的,我'll create a new variable of type T_Frage and set it'的上下文是SelectedItem的值 . 现在我可以对此项执行某些操作,然后将项添加到名为
OCContext
的ContextMenu的列表中 . 当我右键单击该项时,将弹出ContextMenu并显示OCContext
的项目 .