仅使用字符串名称设置 属性
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 属性
的实例
有没有一种方法可以通过使用字符串识别来设置 属性?
例如,我的可见性 属性 看起来像这样:
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 属性