属性网格>如何刷新主要属性

时间:2013-03-06 10:36:38

标签: c# winforms propertygrid

enter image description here

[TypeConverter(typeof(BrokerageConverter))]
[DescriptionAttribute("Brokerage Details")]
[PropertyGridInitialExpanded(true)]
[RefreshProperties(RefreshProperties.Repaint)]
public class Brokerage
{
    private Decimal _Amt = Decimal.Zero; private string _currency = "";

    public Brokerage() { }
    public Brokerage(Decimal broAmount, string broCurrency) { Amount = broAmount; Currency = broCurrency; }

    [ReadOnly(false)]
    public Decimal Amount 
    {
        get { return _Amt; }
        set { _Amt = value; }
    }

    [ReadOnly(true)]
    public string Currency
    {
        get { return _currency; }
        set { _currency = value; }
    }

    //public override string ToString() { return _Amt.ToString() + " - " + _currency; }
}

public class BrokerageConverter : ExpandableObjectConverter
{

    public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)
    {
        if (destinationType == typeof(Brokerage))
            return true;

        return base.CanConvertTo(context, destinationType);
    }


    public override bool CanConvertFrom(ITypeDescriptorContext context, Type t)
    {
        if (t == typeof(string))
        {
            return true;
        }
        return base.CanConvertFrom(context, t);
    }

    // Overrides the ConvertFrom method of TypeConverter.
    public override object ConvertFrom(ITypeDescriptorContext context,CultureInfo culture, object value)
    {
        if (value is string)
        {
            string[] v = ((string)value).Split(new char[] { '-' });
            return new Brokerage(Decimal.Parse(v[0]), v[1]);
        }
        return base.ConvertFrom(context, culture, value);
    }
    // Overrides the ConvertTo method of TypeConverter.
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(System.String) && value is Brokerage)
        {
            Brokerage b = (Brokerage)value;
            return b.Amount.ToString() + " - " + b.Currency.ToString();
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }
}

现在,当我更改金额时,买方兄弟不会自动更新。怎么实现呢?让我知道,如果我必须提供一些额外的信息

3 个答案:

答案 0 :(得分:3)

添加属性" [NotifyParentProperty(true)]"会做的伎俩:

$xml .= '<recipient xtkschema="nms:recipient" _operation="insert"  email=' .$this->email.' />';

确保添加

[ReadOnly(false)]
[NotifyParentProperty(true)]
public Decimal Amount 
{
    get { return _Amt; }
    set { _Amt = value; }
}

现在当你改变Amount并放松这个不同属性的焦点时, parent属性将自动更新。 干杯!

答案 1 :(得分:2)

我过去也遇到过同样的问题。

我确实放了[RefreshProperties(RefreshProperties.Repaint)]RefreshProperties.All,然后我在我的目标对象上实现了INotifyPropertyChanged,但我从未设法让自动机制正常工作。

显然,我am not alone

我在PropertyGrid上使用.Refresh()方法结束了。现在它一直有效。

var b = new Brokerage(10, "EUR");
this.propertyGrid1.SelectedObject = b;

...

b.Amount = 20;
this.propertyGrid1.Refresh();

答案 2 :(得分:-1)

你有没有尝试添加,

[RefreshProperties(RefreshProperties.Repaint)]

到Brokerage类中的2个属性?