Создание динамического описания Description класса DescriptionAttribute пространства имен System.ComponentModel - C#
Формулировка задачи:
Свойство public virtual string Description { get; } имеет дело только со статическими переменными. Я использую компонент DevExpress.XtraVerticalGrid.propertyDescriptionControl для отображения свойств некой таблицы DevExpress.XtraVerticalGrid.PropertyGridControl. Описания свойств этих полей могут меняться в зависимости от некого флага (в свойстве он проверяется). Подскажите, пожалуйста, как мне передать в св-во Description динамическую переменную.
Вычитал где-то что начать с такого нужно, но как это все вывести на DevExpress.XtraVerticalGrid.PropertyGridControl. не знаю.
using System;
using System.Collections.Generic;
using System.Text;
namespace DynamicProperties
{
/// <summary>
/// Abstract class for all dynamic properties.
/// </summary>
public abstract class DynamicProperty<T>
{
// public methods...
/// <summary>
/// Gets value of child property with the given name.
/// </summary>
/// <typeparam name="TValue">The value type of dynamic property.</typeparam>
/// <param name="name">The name of the property to get.</param>
public abstract TValue GetValue<TValue>(string name);
/// <summary>
/// Sets value of child property with the given name.
/// </summary>
/// <typeparam name="TValue">The value type of dynamic property.</typeparam>
/// <param name="name">The name of the property to get.</param>
/// <param name="value">The value to set.</param>
public abstract void SetValue<TValue>(string name, TValue value);
// public properties...
/// <summary>
/// Gets or sets value of this property.
/// </summary>
public abstract T Value
{
get;
set;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace DynamicProperties
{
/// <summary>
/// Simple dynamic property.
/// </summary>
public class SimpleProperty<T> : DynamicProperty<T>
{
T _value;
// constructors...
public SimpleProperty(T value)
{
_value = value;
}
// public methods...
public override TValue GetValue<TValue>(string name)
{
throw new InvalidOperationException("Can't get property value from SimpleProperty instance.");
}
public override void SetValue<TValue>(string name, TValue value)
{
throw new InvalidOperationException("Can't set property value in SimpleProperty instance.");
}
public override bool HasProperty(string name)
{
return false;
}
public override void AddProperty<TValue>(string name, DynamicProperty<TValue> property)
{
throw new InvalidOperationException("Can't add child properties to SimpleProperty instance.");
}
public override void RemoveProperty(string name)
{
throw new InvalidOperationException("Can't remove child properties from SimpleProperty instance.");
}
public override DynamicProperty<TValue> GetProperty<TValue>(string name)
{
throw new InvalidOperationException("Can't get child properties from SimpleProperty instance.");
}
// public properties...
public override T Value
{
get { return _value; }
set { _value = value; }
}
}
}
using System.ComponentModel;
using DynamicProperties;
class RowProperties
{
DynamicProperty<string> stringProperty = new SimpleProperty<string>("StringValue");
[Description(" Текст, который нужно изменить в ходе программы")]
public string F_ACCOUNTBORG
{
get { return ("Что-то"); }
}
// и где-то нужно дописать
DynamicProperty<string> stringProperty = new SimpleProperty<string>("StringValue");
stringProperty.Value = "Нужное значение";
Console.WriteLine("String property value: {0}", stringProperty.Value);
// Но Console мне не нужен мне нужно это передать как-то в Description класса DescriptionAttribute!!!!!!!!!Решение задачи: «Создание динамического описания Description класса DescriptionAttribute пространства имен System.ComponentModel»
textual
Листинг программы
public class Test
{
[DescriptionTest("bla")]
public string Value { get; set; }
}
public static class Setting
{
public static bool IsValue { get; set; }
}
public class DescriptionTest : DescriptionAttribute
{
public DescriptionTest(string description) : base(description)
{
}
public override string Description
{
get
{
if (Setting.IsValue)
return "Bla-bla";
return "Qwerty";
}
}
}