こんにちは。いつもお世話になります。
Windows10, C#, Visual Studio 2015, WPFの組み合わせで開発しています。
次のような構造のClassのpropertiesを再帰的に取得したいです。
現在、1階層目の名前はとれました。
それぞれのpropertyのclass名をとれれば再帰的になりそうです。
しかし、p.を見てもp.Classとかは見あたりませんでした。
なにしろ階層が深いので、再帰で、最終的にtextboxのfull表記と内容を取得したいです。
class名をとる方法を教えてください。
よろしくお願いします。
C#
1namespace ApplicationWindow 2{ 3 public class MainViewModel : ViewModel 4 { 5 private void getProperties() 6 { 7 var vm = new MainWindowViewModel(); 8 var message = new TransinionMessage(vm, Transition.Modal, "ShowMainWindow"); 9 this.Messanger.Raise(message);//windowをmodalでopen 10 11 var strings = new List<string>(); 12 //ClassクラスのTypeオブジェクトを取得する 13 Type t = typeof(MainWindowViewModel); 14 15 // Propertyの一覧を取得する 16 PropertyInfo[] propertyInfos = t.GetProperties(); 17 18 foreach (PropertyInfo p in propertyInfos) 19 { 20 //名を表示 21 strings.Add(p.Name);//sub1ViewModel, sub2ViewModelを取得できる。 22 } 23 } 24 } 25 26 public class MainWindowViewModel : ViewModel 27 { 28 public MainWindowViewModel() 29 { 30 this.sub1ViewModel = new Sub1WindowViewModel(); 31 this.sub1ViewModel = new Sub1WindowViewModel(); 32 } 33 34 public Sub1ViewModel sub1ViewModel { get; } 35 public Sub1ViewModel sub2ViewModel { get; } 36 } 37 38 public class Sub1WindowViewModel : ViewModel 39 { 40 public Sub1WindowViewModel() 41 { 42 this.sub2Sub1ViewModel = new Sub2WindowViewModel(); 43 this.sub2Sub1ViewModel = new Sub2WindowViewModel(); 44 } 45 46 public Sub2ViewModel sub2Sub1ViewModel { get; } 47 public Sub2ViewModel sub2Sub2ViewModel { get; } 48 } 49 50 public class Sub2WindowViewModel : ViewModel 51 { 52 public Sub2WindowViewModel() 53 { 54 this.sub3Sub2Sub1ViewModel = new Sub3WindowViewModel(); 55 this.sub3Sub2Sub1ViewModel = new Sub3WindowViewModel(); 56 } 57 58 public Sub3ViewModel sub3Sub2Sub1ViewModel { get; } 59 public Sub3ViewModel sub3Sub2Sub2ViewModel { get; } 60 } 61 62 public class Sub3WindowViewModel : ViewModel 63 { 64 public string widthText { get; set; } 65 public string heightText { get; set; } 66 } 67} 68
「textboxのfull表記」とは何でしょうか?
p.Name + "/" + p2.Name + "/" + p3.Name + "/"+ p4.Nameのようなかたちで取得できる情報です。
このapplicationというかwindowには、実際には36個のwidthTextとheightTextがあり、それぞれに値が入ります。そこで、
main-sub1-sub2-widthtext 360
main-sub1-sub2-heighttext 240
のように、どのtextboxの値がいくつか、を、組で取得したい、ということです。
言葉足らずでしたら、また追記します。
必ず「main-sub1-sub2-width(height)text」の四階層ですか? また、Height、Width以外のプロパティは(プロパティなら無差別に、いまは存在しなくても、)取る必要がありますか?
今回は4階層です。下記にテストしている通りです。
ただ、せっかくつくるなら再帰のほうがよいと感じています。
height/width以外の値も同様です。
今回はheight/widthのみですが、ある程度拡張できるようにしたほうがよいなーとは思っています。
回答2件
あなたの回答
tips
プレビュー