使用反射读取属性

本文关键字:属性 读取 反射 | 更新日期: 2023-09-27 18:01:42

在我的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
    }
}

你可以一直传播到巢中,只要你想。