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 Width="50" 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>