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
的构造函数,自动生成的线消失。任何人都知道发生了什么事?