wpf treeview中动态创建的treeViewItem如何用右键触发菜单?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf treeview中动态创建的treeViewItem如何用右键触发菜单?相关的知识,希望对你有一定的参考价值。

我从服务器端接收信息并创建TreeViewItem之后,需要右键对这个item进行操作弹出一个菜单,该如何实现?

参考技术A public class ResourcesSettingViewModel : SoftGuidanceViewModelBase
2
3 #region Contructor
4 public ResourcesSettingViewModel()
5 : this(new ResourcesSettingModel())
6
7
8
9 public ResourcesSettingViewModel(ResourcesSettingModel resourcesSettingModel)
10
11 this.resourcesSettingModel = resourcesSettingModel;
12
13
14 #endregion
15 #region Variables
16
17 private ResourcesSettingModel resourcesSettingModel;
18
19 #endregion
20 #region Properties
21 public ResourcesSettingModel ResourcesSettingModel
22
23 get return this.resourcesSettingModel;
24
25 private EverTreeViewItem selectedTreeViewItem;
26
27
28 public EverTreeViewItem SelectedTreeViewItem
29
30 get return this.selectedTreeViewItem;
31 set
32
33 if (this.selectedTreeViewItem == value)
34
35 return;
36
37 this.selectedTreeViewItem = value;
38 this.RaisePropertyChanged(() => this.SelectedTreeViewItem);
39
40
41
42
43 #endregion
44 #region Command
45 public ICommand MenuAddCommand
46
47 get
48
49 return new DelegateCommand(()=>
50
51
52 MessageBox.Show("");
53 );
54
55
56
57
58
59
60
61 #endregion
62
63 //private EverTreeViewItem GetSelectdTreeViewItem()
64 //
65 // EverTreeViewItem treeViewItem = (EverTreeViewItem)SelectedTreeViewItem;
66 // return treeViewItem;
67 //
68
参考技术B 追问

?

参考技术C 是MVVM的开发方式么?追问

是的,但是我觉得一个单纯的代码实现和开发方式没有多大关系吧。。。额,菜鸟所见。。。

追答

有关系啊。。写的地方不一样~~~~思路也不同~

追问

那具体应该怎么写呢?

追答



本回答被提问者采纳

WPF的TreeView通过数据库动态添加修改删除节点功能

如何建表?表里需要什么样的字段?我只需要一个类别的节点字段就可以,比如说现在xaml窗体页面上有一个主的<TreeViewItem Header="所有类别"></TreeViewItem>,如何通过点击一个文本框和一个按钮,当点击这个所有类别时,在其下动态可以添加修改删除子节点呢?DAL数据层是不是象DataGrid一样把数据放入到DataTable里就可以了?具体的思路及示例代码还请高手赐教,在这里感谢了

参考技术A 表中创建三个字段就可以了(ID,Name,ParentID),然后定义一个对应节点的类,比如:
public class TypeNode

public string IDget;set;
public string Nameget;set;
public TypeNode Parentget;set;
public ObservableCollection<TypeNode> Childrenget;set;
public bool IsSelectedget;set;

添加构造节点的方法,根据ID来确定上下级和加载子节点,代码就不列举了;然后实现一下INotifyPropertyChanged接口就差不多了。接着定义几个样式:
<Style x:Key="TypeTreeStyle" TargetType="TreeView">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<ScrollViewer Padding="4" Focusable="False" CanContentScroll="False">
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TypeNode" TargetType="TreeViewItem">
<Setter Property="IsSelected" Value="Binding IsSelected, Mode=TwoWay"/>
<Setter Property="FontWeight" Value="Normal"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
<HierarchicalDataTemplate x:Key="TypeTreeGroup" ItemsSource="Binding Children">
<TextBlock Text="Binding TypeName" FontSize="13"/>
</HierarchicalDataTemplate>
在ViewModel或是后台代码中定义一个ObservableCollection<TypeNode>集合,名为TypeTree,在xaml中添加TreeView并绑定:
<TreeView ItemsSource="Binding TypeTree"
Style="StaticResource TypeTreeStyle"
ItemContainerStyle="StaticResource TypeNode"
ItemTemplate="StaticResource TypeTreeGroup"/>
根据节点的IsSelected属性来确定在哪个位置创建子节点,同时就得到了数据的ParentID,再加上创建时指定的ID和Name存入数据库就完工了。希望对你有帮助,还有疑问请追问或是Hi本回答被提问者采纳

以上是关于wpf treeview中动态创建的treeViewItem如何用右键触发菜单?的主要内容,如果未能解决你的问题,请参考以下文章

wpf中怎么为treeview动态添加子菜单

WPF程序中treeview图标显示不全

wpf如何根据输入信息动态生成treeview

bootstrap treevie只展开一个节点,关闭其他节点

WPF中TreeView控件数据绑定和后台动态添加数据

WPF的TreeView通过数据库动态添加修改删除节点功能