在我的c# WPF应用程序中,我的MainViewModel有这个属性:
public object CurrentViewModel
{
get { return m_currentViewModel; }
set
{
m_currentViewModel = value;
OnPropertyChanged("CurrentViewModel");
}
}
假设CurrentViewModel在运行时返回一个实例类VMParent。
我的VMParent是这样的:
public class VMParent
{
public object BaseViewModel
{
get { return m_baseViewModel; }
set
{
m_baseViewModel = value;
}
}
}
并且BaseViewModel属性在运行时返回一个类VMBase的实例,该类具有一定数量的属性。
现在,点击MainViewModel中的一个按钮。xaml,使用反射,我需要读取CurrentViewModel和BaseViewModel的所有属性的值。我能够这样做的CurrentViewModel,但不为BaseViewModel。
有什么建议吗?谢谢。
Type sourceType = CurrentViewModel.GetType();
PropertyInfo[] sourcePI= sourceType.GetProperties();
我将通过打印属性的名称来说明这个功能。如下所示
foreach (var p in sourcePI)
{
Console.WriteLine(p.Name);
var nested = p.GetValue(CurrentViewModel).GetType().GetProperties();
foreach (var n in nested)
{
WriteLine(n.Name);
// you can continue to nest as you like
}
}
你可以一直传播到巢中,只要你想。