teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コードの修正

2017/03/24 11:08

投稿

sa_sa
sa_sa

スコア15

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

コードの修正

2017/03/24 11:08

投稿

sa_sa
sa_sa

スコア15

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,7 @@
18
18
  を書くことで選択項目を削除するつもりでした。
19
19
 
20
20
  ###該当のソースコード
21
- ListAddRemoveViewプロジェクト
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 RemoveElement}" />
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
- ListAddRemoveViewModelプロジェクト
67
+ TreeViewAddRemoveViewModelプロジェクト
68
68
  ```
69
69
  MainWindowViewModel.cs
70
70
  --------------------------------------------
71
- using System.Windows.Input;
71
+ using GalaSoft.MvvmLight;
72
- using Microsoft.Practices.Prism.Commands;
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 MainWindowViewModel()
98
+ public TreeObject()
94
99
  {
95
- People = new Person()
100
+ var p = new Person()
96
101
  {
102
+ Children =
103
+ {
97
- new Person("Human01")
104
+ new Person("Human01")
98
- {
99
- Children=new Person
100
105
  {
106
+ Children =
107
+ {
101
- new Person("Human02"),
108
+ new Person("Human02"),
102
- new Person("Human03")
109
+ new Person("Human03")
110
+ }
103
111
  }
104
112
  }
105
113
  };
114
+ p.SetParent();
115
+ People = p.Children;
106
116
  }
107
-
117
+ }
118
+
108
- private ICommand removeElement;
119
+ public class Person : ViewModelBase
120
+ {
121
+ public Person() { }
109
- public ICommand RemoveElement
122
+ public Person(string name)
110
123
  {
111
- get { return removeElement = new DelegateCommand(removeMethod); }
124
+ Name = name;
112
125
  }
113
- private void removeMethod()
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
  {