未进入setter的类型class的属性

本文关键字:类型 属性 class setter | 更新日期: 2023-09-27 18:05:27

我有一个名为SightGlass的用户控件:

public SightGlassData SightGlass
{
    get
    {
        return _sightGlass;
    }
    set
    {
        //This code is never entered!
        _sightGlass = value;
        CalculateSightGlassRect();
    }
}

SightGlassData类定义如下,使用类型转换器在设计时允许在Visual Studio的属性窗口中编辑单个属性:

[TypeConverter(typeof(ExpandableObjectConverter))]
public class SightGlassData
{
    //Various public properties in here...
}

问题:我在设计时将用户控件添加到Visual Studio中的窗体中。在设计时从Visual Studio的属性窗口编辑用户控件的属性SightGlass中的子属性时,该属性按预期更改,但未输入用户控件中属性的setter

这意味着函数CalculateSightGlassRect()永远不会被调用,因此我不能在设计时可视化地更新我的用户控件。

我认为我需要向SightGlassData类添加一个事件,当属性被更改时触发(然后用户控件将订阅此事件),但显然这种事件仅用于运行时使用。

问题:我如何确保main属性的setter被调用,而不仅仅是sub属性在类中的setter ?

未进入setter的类型class的属性

我猜你在做这样的事情:

SightGlass.Property = value;

此操作不涉及setter。您正在使用get访问SightGlassData值,并使用set访问它的一个属性。如果您想要执行SightGlass属性的setter,您可以这样做:

SightGlass = new SightGlassData();