C# 设计器自动生成不需要的代码,我可以';不能摆脱

C# 设计器自动生成不需要的代码,我可以';不能摆脱,c#,.net,C#,.net,我刚刚用以下代码创建了一个控件: public partial class KindsEditor : NaviGroupList, INotifyPropertyChanged { private WebBrowser _Browser; private BasicProject _Project; public event PropertyChangedEventHandler PropertyChanged; public bool RequiredDat

我刚刚用以下代码创建了一个控件:

public partial class KindsEditor : NaviGroupList, INotifyPropertyChanged
{
    private WebBrowser _Browser;
    private BasicProject _Project;

    public event PropertyChangedEventHandler PropertyChanged;
    public bool RequiredDataLoaded { get { return (Project != null) && (Browser != null); } }
    private bool _ButtonsEnabled = false;
    public bool ButtonsEnabled { set { SetButtonsEnabled(value); } get { return _ButtonsEnabled; } }

    public WebBrowser Browser
    {
        get { return _Browser; }
        set
        {
            _Browser = value;
            OnPropertyChanged(new PropertyChangedEventArgs("Browser"));
            OnPropertyChanged(new PropertyChangedEventArgs("RequiredDataLoaded"));
        }
    }

    public BasicProject Project
    {
        get { return null; }
        set { LoadProject(value); }
    }

    public KindsEditor()
    {
        InitializeComponent();
        DataBindings.Add("ButtonsEnabled", this, "RequiredDataLoaded");
    }

    private void SetButtonsEnabled(bool value)
    {
        newKindButton.Enabled = value;
        _ButtonsEnabled = value;
        OnPropertyChanged(new PropertyChangedEventArgs("ButtonsEnabled"));
    }

    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null) PropertyChanged(this, e);
    }

    private void LoadProject(BasicProject value)
    {
        if (value != null) DataSource = value.Kinds;
        _Project = value;
        OnPropertyChanged(new PropertyChangedEventArgs("Project"));
        OnPropertyChanged(new PropertyChangedEventArgs("RequiredDataLoaded"));
    }
}
我删除了一些我认为与我的问题无关的东西。我试图将一个按钮(
newKindButton
)绑定到两个属性(
Browser
Project
)不为空。我知道这很混乱,没有人会期望我在更改另一个属性和其他不应该做的事情时调用
OnPropertyChanged
。我稍后会解决的。但奇怪的是,使用此控件的
表单
(我从工具箱中拖放它)将这一行添加到
InitializeComponent()
自动生成的代码中:

        this.kindsEditor1.DataBindings.Add(new System.Windows.Forms.Binding("ButtonsEnabled", this.kindsEditor1, "RequiredDataLoaded", true));
因此,当我尝试运行该应用程序时,会出现一个异常,告诉我此行试图绑定到同一属性两次。我发誓,我从未从属性面板添加任何绑定。如果我拆下这条线

    DataBindings.Add("ButtonsEnabled", this, "RequiredDataLoaded");

KindsEditor
的构造函数中,自动生成的行消失。有人知道发生了什么吗?

尝试在绑定周围添加
DesignerProperty.GetIsInDesignMode

public KindsEditor()
{
    InitializeComponent();

    if (!DesignerProperties.GetIsInDesignMode(this))
        DataBindings.Add("ButtonsEnabled", this, "RequiredDataLoaded");
}

我没有直接的答案,但我怀疑VisualStudio认为它需要序列化某些东西(生成的代码),而它不应该这样做。上述构造对Visual Studio隐藏绑定,并且仅在运行时激活它。

尝试在绑定周围添加
DesignerProperties。GetIsInDesignMode

public KindsEditor()
{
    InitializeComponent();

    if (!DesignerProperties.GetIsInDesignMode(this))
        DataBindings.Add("ButtonsEnabled", this, "RequiredDataLoaded");
}
我没有直接的答案,但我怀疑VisualStudio认为它需要序列化某些东西(生成的代码),而它不应该这样做。上面的构造对VisualStudio隐藏绑定,并且仅在运行时激活它