質問編集履歴
2
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -175,28 +175,7 @@
|
|
175
175
|
private RelayCommand _chopCommand;
|
176
176
|
#endregion
|
177
177
|
}
|
178
|
-
}
|
179
178
|
|
180
|
-
public class Person : ObservableCollection<Person>
|
181
|
-
{
|
182
|
-
public Person(){}
|
183
|
-
public Person(string name)
|
184
|
-
{
|
185
|
-
Name = name;
|
186
|
-
}
|
187
|
-
private string name;
|
188
|
-
public string Name
|
189
|
-
{
|
190
|
-
get { return name; }
|
191
|
-
set { name = value; }
|
192
|
-
}
|
193
|
-
private Person children;
|
194
|
-
public Person Children
|
195
|
-
{
|
196
|
-
get { return children; }
|
197
|
-
set { children = value; }
|
198
|
-
}
|
199
|
-
}
|
200
179
|
}
|
201
180
|
|
202
181
|
|
1
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
を書くことで選択項目を削除するつもりでした。
|
19
19
|
|
20
20
|
###該当のソースコード
|
21
|
-
|
21
|
+
TreeViewAddRemoveViewプロジェクト
|
22
22
|
```ここに言語を入力
|
23
23
|
MainWindow.xaml
|
24
24
|
------------------------------------------
|
@@ -32,7 +32,7 @@
|
|
32
32
|
<RowDefinition Height="20" />
|
33
33
|
</Grid.RowDefinitions>
|
34
34
|
|
35
|
-
<TreeView Name="treeview" Grid.Row="0" ItemsSource="{Binding People}">
|
35
|
+
<TreeView Name="treeview" Grid.Row="0" ItemsSource="{Binding TreeObject.People}">
|
36
36
|
<TreeView.ItemTemplate>
|
37
37
|
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
|
38
38
|
<TextBlock Text="{Binding Name}" />
|
@@ -40,7 +40,7 @@
|
|
40
40
|
</TreeView.ItemTemplate>
|
41
41
|
</TreeView>
|
42
42
|
|
43
|
-
<Button Grid.Row="1" Name="button" Content="RemoveButton" Command="{Binding
|
43
|
+
<Button Grid.Row="1" Name="button" Content="RemoveButton" Command="{Binding Person.ChopCommand}" />
|
44
44
|
</Grid>
|
45
45
|
</Window>
|
46
46
|
```
|
@@ -64,57 +64,118 @@
|
|
64
64
|
}
|
65
65
|
```
|
66
66
|
|
67
|
-
|
67
|
+
TreeViewAddRemoveViewModelプロジェクト
|
68
68
|
```
|
69
69
|
MainWindowViewModel.cs
|
70
70
|
--------------------------------------------
|
71
|
-
using
|
71
|
+
using GalaSoft.MvvmLight;
|
72
|
-
using
|
72
|
+
using GalaSoft.MvvmLight.Command;
|
73
73
|
using System.Collections.ObjectModel;
|
74
74
|
|
75
75
|
namespace TreeAddRemoveViewModel
|
76
76
|
{
|
77
|
-
public class MainWindowViewModel
|
77
|
+
public class MainWindowViewModel: ViewModelBase
|
78
78
|
{
|
79
|
+
public TreeObject TreeObject { get; private set; }
|
80
|
+
public Person Person { get; private set; }
|
81
|
+
|
82
|
+
public MainWindowViewModel()
|
83
|
+
{
|
84
|
+
TreeObject = new TreeObject();
|
85
|
+
Person = new Person();
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
public class TreeObject : ViewModelBase
|
90
|
+
{
|
79
91
|
private ObservableCollection<Person> people;
|
80
92
|
public ObservableCollection<Person> People
|
81
93
|
{
|
82
94
|
get { return people; }
|
83
95
|
set { people = value; }
|
84
96
|
}
|
85
|
-
|
86
|
-
private Person selectedPerson = null;
|
87
|
-
public Person SelectedPerson
|
88
|
-
{
|
89
|
-
get { return selectedPerson; }
|
90
|
-
set{ selectedPerson = value; }
|
91
|
-
}
|
92
97
|
|
93
|
-
public
|
98
|
+
public TreeObject()
|
94
99
|
{
|
95
|
-
|
100
|
+
var p = new Person()
|
96
101
|
{
|
102
|
+
Children =
|
103
|
+
{
|
97
|
-
|
104
|
+
new Person("Human01")
|
98
|
-
{
|
99
|
-
Children=new Person
|
100
105
|
{
|
106
|
+
Children =
|
107
|
+
{
|
101
|
-
|
108
|
+
new Person("Human02"),
|
102
|
-
|
109
|
+
new Person("Human03")
|
110
|
+
}
|
103
111
|
}
|
104
112
|
}
|
105
113
|
};
|
114
|
+
p.SetParent();
|
115
|
+
People = p.Children;
|
106
116
|
}
|
107
|
-
|
117
|
+
}
|
118
|
+
|
108
|
-
|
119
|
+
public class Person : ViewModelBase
|
120
|
+
{
|
121
|
+
public Person() { }
|
109
|
-
public
|
122
|
+
public Person(string name)
|
110
123
|
{
|
111
|
-
|
124
|
+
Name = name;
|
112
125
|
}
|
113
|
-
private
|
126
|
+
private string name;
|
127
|
+
public string Name
|
114
128
|
{
|
115
|
-
|
129
|
+
get { return name; }
|
130
|
+
set { name = value; }
|
116
131
|
}
|
132
|
+
public Person Parent { get; set; }
|
133
|
+
|
134
|
+
private ObservableCollection<Person> children = new ObservableCollection<Person>();
|
135
|
+
public ObservableCollection<Person> Children
|
136
|
+
{
|
137
|
+
get { return children; }
|
138
|
+
set { children = value; }
|
139
|
+
}
|
140
|
+
|
141
|
+
/// <summary>
|
142
|
+
/// 親子関係の設定
|
143
|
+
/// </summary>
|
144
|
+
public void SetParent()
|
145
|
+
{
|
146
|
+
foreach (var item in Children)
|
147
|
+
{
|
148
|
+
item.Parent = this;
|
149
|
+
item.SetParent();
|
150
|
+
}
|
151
|
+
}
|
152
|
+
|
153
|
+
public void AddChild(Person p)
|
154
|
+
{
|
155
|
+
this.Children.Add(p);
|
156
|
+
p.Parent = this;
|
157
|
+
}
|
158
|
+
|
159
|
+
private void chop()
|
160
|
+
{
|
161
|
+
if(this.Parent != null)
|
162
|
+
{
|
163
|
+
this.Parent.Children.Remove(this);
|
164
|
+
}
|
165
|
+
//this.Parent?.Children.Remove(this);
|
166
|
+
}
|
167
|
+
#region remove Command
|
168
|
+
/// <summary>
|
169
|
+
/// Gets the remove.
|
170
|
+
/// </summary>
|
171
|
+
public RelayCommand ChopCommand
|
172
|
+
{
|
173
|
+
get { return _chopCommand ?? (_chopCommand = new RelayCommand(() => { chop(); })); }
|
174
|
+
}
|
175
|
+
private RelayCommand _chopCommand;
|
176
|
+
#endregion
|
117
177
|
}
|
178
|
+
}
|
118
179
|
|
119
180
|
public class Person : ObservableCollection<Person>
|
120
181
|
{
|