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隐藏绑定,并且仅在运行时激活它