仅使用字符串名称设置 属性

Setting Property using only string name

有没有一种方法可以通过使用字符串识别来设置 属性?

例如,我的可见性 属性 看起来像这样:

public Visibility ModifyFilesIconVisibility
        {
            get { return modifyFilesIconVisibility; }
            set
            {
                SetProperty(ref modifyFilesIconVisibility, value, () => ModifyFilesIconVisibility);
            }
        }

绑定到 XAML 中的一个图标。由于每个图标的可见性是在运行时根据用户访问每个 APIs 的权限设置的,因此我有一个字典映射:

public static Dictionary<string, List<string>> Views = new Dictionary<string, List<string>> {
                        {
    "ModifyFiles", 
            new List<string>{"/editFile", "/deleteFile", "/cutFile", "/copyFile"}
        }, 
                        {
    "CRUDLogs", 
            new List<string>{"/writeLog", "/deleteLog", "/viewLog", "/searchLog"}
        },       
                        };    

并且如果列表中的任何 APIs 在权限中可用(我也从外部 API 收到),我将修改每个图标的可见性。因此,例如,如果 /editFile 对用户可用,则将设置 ModifyFilesIconVisibility:

foreach (string api in APIMappings.Views["ModifyFiles"])
{
  if (URLs.Contains(api)) 
  {
   this.ModifyFilesIconVisibility = Visibility.Visible;
   break;
  }
}

否则它们将保留为 Visibility.Collapsed

因为这很乏味,我想知道我是否可以以某种方式在映射中使用 属性 本身的名称

public static Dictionary<string, List<string>> Views = new Dictionary<string, List<string>> {
                        {
    "ModifyFilesIconVisibility", 
            new List<string>{"/editFile", "/deleteFile", "/cutFile", "/copyFile"}
        }, 
                        {
    "CRUDLogsIconVisibility", 
            new List<string>{"/writeLog", "/deleteLog", "/viewLog", "/searchLog"}
        },       
                        };    

或类似的东西,然后使用字典键通过反射或其他任何方式将其设置为可见。这可能吗?

 string propertyName = "ModifyFilesIconVisibility";

 var property = TypeDescriptor.GetProperties(this).Find(propertyName, false);
 property.SetValue(this, Visibility.Visible);

假设 this 指向具有 ModifyFilesIconVisibility 属性

的实例