如何在PropertyGrid TypeConversion中获取旧值?

时间:2011-04-23 23:09:54

标签: c# .net winforms propertygrid typeconverter

我有一个属性网格输入的特殊情况,我需要在字符串格式下输入Vector3,让我们说“0,5,1”。我为它构建了转换器:

public class Vector3Converter : ExpandableObjectConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        return (sourceType == typeof(string));
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        string[] splitted = ((string)value).Remove(" ").Split(new char[] { ',' });

        return new Vector3(float.Parse(splitted[0]), float.Parse(splitted[1]), float.Parse(splitted[2]));
    }
}

现在这种方式起作用了,但是出于另一个原因(我不打算解释,它是非常长的,但是有道理 - 我无法通过改变我的初始设计来避免它),我需要知道该领域的价值是什么在设置新的之前(以某种方式取决于它)。

我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

嗯,你应该修改你的设计,这样你就不必这样做了。请记住,类型转换器不是由属性网格专门使用的,并且当没有“旧值”可以说时,很可能需要转换。

这有点像黑客,但您可以将context强制转换为System.Windows.Forms.GridItem,它代表属性网格上的一行,然后检查其Value属性。 显然,当在非属性网格上下文中调用ConvertFrom方法时,这不起作用。

public override object ConvertFrom 
     (ITypeDescriptorContext context, CultureInfo culture, object value)
{
    var gridItem = context as GridItem;

    // If the context is indeed a property-grid item...
    if (gridItem != null)
    {
        var oldVector = (Vector3)gridItem.Value;
        ...
    }

}