WPF treeview 多层次绑定问题 HierarchicalDataTemplate 和 CompositeCollection

摘要:
1publicclassClause:DependencyObject2{3publicClause()4{5this.Prent=null;6}7publicClause(ClauseParent)8{9this.Parent=Parent;10}11privateObservableCollection<Criteria>_ criterias=newObservable集合˂
 1     public class Clause : DependencyObject
 2     {
 3         public Clause()
 4         {
 5             this.Parent = null;
 6         }
 7         public Clause(Clause Parent)
 8         {
 9             this.Parent = Parent;
10         }
11         private ObservableCollection<Criteria> _criterias = new ObservableCollection<Criteria>();
12         private ObservableCollection<Clause> _clauses = new ObservableCollection<Clause>();
13 
14         public Clause Parent { get; set; }
15         public string Type { get; set; }
16 
17         public ObservableCollection<Criteria> Criterias
18         {
19             get { return _criterias; }
20             set { _criterias = value; }
21         }
22         public ObservableCollection<Clause> Clauses
23         {
24             get { return _clauses; }
25             set { _clauses = value; }
26         }
27 
28         public CompositeCollection Children
29         {
30             get
31             {
32                 CompositeCollection o = new CompositeCollection();
33                 o.Add(new CollectionContainer() { Collection = Clauses });
34                 o.Add(new CollectionContainer() { Collection = Criterias });
35                 return o;
36             }
37         }
38 
39     }
40 
41     public class Criteria : DependencyObject
42     {
43 
44         public Criteria(Clause Parent,
45                         string Category,
46                         string Field,
47                         string Operator,
48                         string Value)
49         {
50             this.Parent = Parent;
51             this.Category = Category;
52             this.Field = Field;
53             this.Operator = Operator;
54             this.Value = Value;
55         }
56 
57         public Clause Parent { get; set; }
58         public string Category { get; set; }
59         public string Field { get; set; }
60         public string Operator { get; set; }
61         public string Value { get; set; }
62 
63     }
  1         <TreeView Name="ruleTreeView"
  2                   ItemsSource="{Binding Clauses}">
  3             <TreeView.Resources>
  4                 <Style TargetType="TreeViewItem">
  5                     <Setter Property="Template">
  6                         <Setter.Value>
  7                             <ControlTemplate TargetType="TreeViewItem">
  8                                 <Grid Margin="2,2,0,2"
  9                                       ShowGridLines="False">
 10                                     <Grid.RowDefinitions>
 11                                         <!--The top row contains the item's content.-->
 12                                         <RowDefinition Height="Auto" />
 13                                         <!--The bottom row contains the item's children.-->
 14                                         <RowDefinition Height="*" />
 15                                     </Grid.RowDefinitions>
 16                                     <Grid.ColumnDefinitions>
 17                                         <ColumnDefinition Width="30" />
 18                                         <ColumnDefinition Width="*" />
 19                                     </Grid.ColumnDefinitions>
 20 
 21                                     <ContentPresenter Grid.Row="0"
 22                                                       Grid.ColumnSpan="2"
 23                                                       Name="PART_Header"
 24                                                       ContentSource="Header" />
 25 
 26                                     <Border Grid.Row="1"
 27                                             Grid.Column="0"
 28                                             BorderBrush="#FF7F9DB9"
 29                                             BorderThickness="1,0,0,0" />
 30 
 31                                     <ItemsPresenter Grid.Row="1"
 32                                                     Grid.Column="1"
 33                                                     Margin="0,0,0,0" />
 34 
 35                                 </Grid>
 36                             </ControlTemplate>
 37                         </Setter.Value>
 38                     </Setter>
 39                 </Style>
 40                 <HierarchicalDataTemplate DataType="{x:Type local:Clause}"
 41                                           ItemsSource="{Binding Children}">
 42                     <DockPanel>
 43                         <!--<ComboBox ItemsSource="{StaticResource ClauseListString}"
 44                                   DisplayMemberPath="DisplayString"
 45                                   SelectedValuePath="ValueString"
 46                                   SelectedValue="{Binding Type}"
 47                                    
 48                                   DockPanel.Dock="Left" />-->
 49                         <TextBlock Text="{Binding Type}"></TextBlock>
 50 
 51                         <Label DockPanel.Dock="Left"
 52                                HorizontalAlignment="Left">of the following are met</Label>
 53                         <Button DockPanel.Dock="Right"
 54                                 HorizontalAlignment="Right"
 55                                 Width="20"
 56                                 Click="DelButton_Click"
 57                                 Tag="{Binding}"
 58                                 x:Name="DelButton">-</Button>
 59                         <Button DockPanel.Dock="Right"
 60                                 HorizontalAlignment="Right"
 61                                 Width="20"
 62                                 Click="AddButton_Click"
 63                                 Tag="{Binding}">+</Button>
 64                         <Button DockPanel.Dock="Right"
 65                                 HorizontalAlignment="Right"
 66                                 Width="20"
 67                                 Click="AddChildButton_Click"
 68                                 Tag="{Binding}"></Button>
 69                     </DockPanel>
 70 
 71                 </HierarchicalDataTemplate>
 72                 <DataTemplate DataType="{x:Type local:Criteria}">
 73                     <Grid Margin="0">
 74                         <Grid.ColumnDefinitions>
 75                             <ColumnDefinition Width="Auto" />
 76                             <ColumnDefinition Width="Auto" />
 77                             <ColumnDefinition Width="150" />
 78                             <ColumnDefinition Width="100" />
 79                             <ColumnDefinition Width="200" />
 80                             <ColumnDefinition Width="*" />
 81                         </Grid.ColumnDefinitions>
 82                         <Grid.RowDefinitions>
 83                             <RowDefinition Height="Auto" />
 84                         </Grid.RowDefinitions>
 85 
 86                         <Button Grid.Column="0"
 87                                 Click="OutdentButton_Click"
 88                                 x:Name="OutdentButton"
 89                                 Tag="{Binding}">
 90                             <Canvas Width="5"
 91                                     Height="6"
 92                                     Canvas.Left="0"
 93                                     Canvas.Top="0">
 94                                 <Path Width="5"
 95                                       Height="6"
 96                                       Stretch="Fill"
 97                                       Fill="#FF000000"
 98                                       Data="F1 M 610.68,232.403L 592.412,214.134C 591.77,213.492 590.807,213.3 589.968,213.648C 589.131,213.995 588.584,214.812 588.584,215.72L 588.584,252.257C 588.584,253.164 589.131,253.981 589.968,254.328C 590.247,254.444 590.538,254.498 590.826,254.498C 591.41,254.498 591.983,254.272 592.412,253.844L 610.68,235.573C 611.098,235.156 611.338,234.578 611.338,233.988C 611.338,233.398 611.098,232.82 610.68,232.403 Z "
 99                                       RenderTransformOrigin="0.5,0.5">
100                                     <Path.RenderTransform>
101                                         <RotateTransform Angle="180" />
102                                     </Path.RenderTransform>
103                                 </Path>
104                             </Canvas>
105                         </Button>
106                         <Button Grid.Column="1"
107                                 Click="IndentButton_Click"
108                                 x:Name="IndentButton"
109                                 Tag="{Binding}">
110                             <Canvas Width="5"
111                                     Height="6"
112                                     Canvas.Left="0"
113                                     Canvas.Top="0">
114                                 <Path Width="5"
115                                       Height="6"
116                                       Stretch="Fill"
117                                       Fill="#FF000000"
118                                       Data="F1 M 610.68,232.403L 592.412,214.134C 591.77,213.492 590.807,213.3 589.968,213.648C 589.131,213.995 588.584,214.812 588.584,215.72L 588.584,252.257C 588.584,253.164 589.131,253.981 589.968,254.328C 590.247,254.444 590.538,254.498 590.826,254.498C 591.41,254.498 591.983,254.272 592.412,253.844L 610.68,235.573C 611.098,235.156 611.338,234.578 611.338,233.988C 611.338,233.398 611.098,232.82 610.68,232.403 Z " />
119                             </Canvas>
120                         </Button>
121 
122                         <ComboBox Grid.Column="2"
123                                   ItemsSource="{StaticResource FieldListString}"
124                                   DisplayMemberPath="ValueString"
125                                   SelectedValuePath="ValueString"
126                                   SelectedValue="{Binding Field, Mode=TwoWay}" />
127                         <ComboBox Grid.Column="3"
128                                   ItemsSource="{StaticResource OperatorListString}"
129                                   DisplayMemberPath="ValueString"
130                                   SelectedValuePath="ValueString"
131                                   SelectedValue="{Binding Operator, Mode=TwoWay}" />
132                         <TextBox Grid.Column="4"
133                                  Text="{Binding Value, Mode=TwoWay}"
134                                  x:Name="ValueTextBox" />
135                         <ComboBox Grid.Column="4"
136                                   ItemsSource="{StaticResource GroupListString}"
137                                   DisplayMemberPath="ValueString"
138                                   SelectedValuePath="ValueString"
139                                   SelectedValue="{Binding Value, Mode=OneWay}"
140                                   x:Name="ValueCombo"
141                                   Visibility="Collapsed" />
142                         <DockPanel Grid.Column="5">
143                             <Button DockPanel.Dock="Right"
144                                     HorizontalAlignment="Right"
145                                     Width="20"
146                                     Click="DelButton_Click"
147                                     Tag="{Binding}">-</Button>
148                             <Button DockPanel.Dock="Right"
149                                     HorizontalAlignment="Right"
150                                     Width="20"
151                                     Click="AddButton_Click"
152                                     Tag="{Binding}">+</Button>
153                             <Button DockPanel.Dock="Right"
154                                     HorizontalAlignment="Right"
155                                     Width="20"
156                                     Click="AddChildButton_Click"
157                                     Tag="{Binding}"></Button>
158 
159                         </DockPanel>
160                     </Grid>
161 
162                 </DataTemplate>
163 
164             </TreeView.Resources>
165 
166         </TreeView>

免责声明:文章转载自《WPF treeview 多层次绑定问题 HierarchicalDataTemplate 和 CompositeCollection》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gitlab简单使用教程【转】tomcat定时重启下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF中UserControl的属性和事件

WPF中自定义控件有两种,一种是继承自control的自定义控件,另一种是继承自UserControl的用户控件。用户控件可以认为是一系列原生控件的集合。本文主要介绍如何创建一个用户控件,以及用户控件的自定义属性和事件。 一、创建一个用户控件 1、一种是直接创建用户控件工程,这样会生成DLL,使用时调用DLL 2、在当前工程中直接创建 创建之后会生成一...

SWFUpload 按钮显示问题

问题: 今天遇到一个这样的问题,我用Vs2010打开用SWFUpload上传文件的网页时,按钮显示不出来,试了好多方法,终于被我找到了! 解决方法: 原来是vs2010自带的Asp.net Development Server 浏览的问题, 只要把网页发布到IIS上运行就没有问题了,记录下来,以防以后出现类似的问题!...

8天入门wpf(转)

8天入门wpf—— 第一天 基础概念介绍8天入门wpf—— 第二天 xaml详解8天入门wpf—— 第三天 样式8天入门wpf—— 第四天 模板8天入门wpf—— 第五天 数据绑定8天入门wpf—— 第六天 细说控件8天入门wpf—— 第七天 画刷8天入门wpf—— 第八天 最后的补充WPF 一个MVVM的简单例子 MVVM设计模式...

SweetAlert弹窗使用

所需文件只有两个,一个是css,一个是js,网上比较难找,所以已上传到网盘,需要可自行下载 链接:https://pan.baidu.com/s/1ROWJqG3pzqBD7uxqLPMqtw 提取码:abab 就像这样,直接引用即可 <link rel="stylesheet" href="../statics/sweetalert/sweeta...

《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

1、前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑。但是在ArcGIS Runtime SDK for Android的版本中并没有提供类似的功能,实现过程相对较复杂。(10.2.8及以下版本需要用户自定义扩展...

vue按键修饰符@keyup.enter.native

Vue 允许为 v-on 在监听键盘事件时添加按键修饰符: <!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` --> <input v-on:keyup.enter="submit"> 应用场景: 1、当我们在登录页面中,输完密码后,点击enter键就可以发起登录请求 <!-- 登录表单区...