使用反射读取属性

时间:2016-08-10 20:44:04

标签: c# wpf mvvm reflection

在我的C#WPF应用程序中,我的MainViewModel具有以下属性:

result = sqrt(pow(a, 2) + pow(b, 2)) ;

让我们说CurrentViewModel在运行时返回一个实例类VMParent。

我的VMParent看起来像这样:

public object CurrentViewModel
        {
            get { return m_currentViewModel; }
            set
            {
                m_currentViewModel = value;
                OnPropertyChanged("CurrentViewModel");
            }
        }

BaseViewModel属性在运行时返回类VMBase的实例,该实例具有一定数量的属性。

现在,点击我的MainViewModel.xaml中的按钮,使用反射,我需要读取CurrentViewModel和BaseViewModel的所有属性的值。 我能够为CurrentViewModel而不是BaseViewModel。

请指点什么? 感谢。

public class VMParent
{
 public object BaseViewModel
        {
            get { return m_baseViewModel; }
            set
            {
                m_baseViewModel = value;
            }
        }
}

1 个答案:

答案 0 :(得分:0)

我将通过打印属性的名称来说明此功能。如下所示

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
    }
}

您可以根据需要多次传播到巢中