2010-10-23 29 views
1

我刚刚创建与下面的代码控制:设计师自动生成有害代码我无法摆脱的

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)被启用到两个属性(BrowserProject)不为空。我知道这很麻烦,没有人会希望我在拨打OnPropertyChanged的同时改变不同的财产和其他可能不应该完成的事情。我稍后会解决这个问题。但奇怪的是,使用这种控制(我将它从工具箱下降吧)Form加入这行来InitializeComponent()自动生成的代码:

 this.kindsEditor1.DataBindings.Add(new System.Windows.Forms.Binding("ButtonsEnabled", this.kindsEditor1, "RequiredDataLoaded", true)); 

所以,当我尝试运行应用程序,我得到一个异常告诉我这条线试图绑定到同一个属性两次。我发誓,我从来没有从属性面板添加任何绑定。如果我删除线

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

KindsEditor的构造函数,自动生成的线消失。任何人都知道发生了什么事?

回答

1

尝试增加各地结合DesignerProperties.GetIsInDesignMode

public KindsEditor() 
{ 
    InitializeComponent(); 

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

我没有直接回答,但我怀疑的Visual Studio认为它需要序列东西(生成的代码),当它不应该。上述构造隐藏了Visual Studio中的绑定,仅在运行时激活它。