2010-10-23 34 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中的綁定,僅在運行時激活它。