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
)被啓用到兩個屬性(Browser
和Project
)不爲空。我知道這很麻煩,沒有人會希望我在撥打OnPropertyChanged
的同時改變不同的財產和其他可能不應該完成的事情。我稍後會解決這個問題。但奇怪的是,使用這種控制(我將它從工具箱下降吧)Form
加入這行來InitializeComponent()
自動生成的代碼:
this.kindsEditor1.DataBindings.Add(new System.Windows.Forms.Binding("ButtonsEnabled", this.kindsEditor1, "RequiredDataLoaded", true));
所以,當我嘗試運行應用程序,我得到一個異常告訴我這條線試圖綁定到同一個屬性兩次。我發誓,我從來沒有從屬性面板添加任何綁定。如果我刪除線
DataBindings.Add("ButtonsEnabled", this, "RequiredDataLoaded");
從KindsEditor
的構造函數,自動生成的線消失。任何人都知道發生了什麼事?