如何将 属性 添加到控件的数据绑定
How to add a property to a control's DataBindings
我想编写一个从 CheckedListBoxControl (DevExpress) 派生的控件,我需要在 (DataBindings)
中添加一个 属性
这些是 PropertyGrid 中显示的标准属性:
所以我只能在Tag
和Text
之间选择。
我想要的是添加第三个选项 gttMasterField
(类型为 int
,不知道这是否重要)
我一直在试验文档,但没有结果。
这些似乎没有涵盖我正在寻找的确切内容,我不知道找到它的正确搜索词,这使得 google 很难找到它。它可能会在文档中的某个地方,但我也不知道要查找什么术语。
Create a Windows Forms user control that supports simple data binding
Create a Windows Forms user control that supports lookup data binding
Create a Windows Forms user control that supports complex data binding
这是一些带有注释的代码,它们也有助于解释我正在搜索的内容
public partial class gttDXManyToManyCheckedListBox : CheckedListBoxControl
{
private int _gttMasterField;
// This I want populated by setting the binding property MasterField
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
}
该项目是 dotnet framework 4.7.2
要使自定义 属性 出现在 属性 网格的(数据绑定)中,请将 BindableAttribute 设置为 true
来修饰 属性:
[Bindable(true)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
还可以选择使用所需的 DesignerSerializationVisibilityAttribute 属性进行装饰
[Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
class也可以指定默认bindable属性,设置一个DefaultBindingPropertyAttribute:
[DefaultBindingProperty("gttMasterField")]
public partial class gttDXManyToManyCheckedListBox : CheckedListBoxControl
{
private int _gttMasterField;
[Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
}
重要提示:
class 应该实现 INotifyPropertyChanged -> 可绑定的 属性 应该引发通知事件。当在Designer中设置绑定时,会生成一个BindingSource来调解绑定,但它需要涉及的对象发送更改通知(主要是确定属性值何时更新,通常为DataSourceUpdateMode.OnPropertyChanged
).
例如:
using System.Runtime.CompilerServices;
[DefaultBindingProperty("gttMasterField")]
public partial class gttDXManyToManyCheckedListBox : CheckedListBoxControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _gttMasterField;
[Bindable(true)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; NotifyPropertyChanged(); }
}
private void NotifyPropertyChanged([CallerMemberName] string PropertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
}
设置DesignerSerializationVisibility.Content
表示初始化。如果使用 BindingSource,该对象支持自身初始化,并不严格要求属性。
不过,它可以设置为 DesignerSerializationVisibility.Hidden
,具体取决于用例。
我想编写一个从 CheckedListBoxControl (DevExpress) 派生的控件,我需要在 (DataBindings)
这些是 PropertyGrid 中显示的标准属性:
所以我只能在Tag
和Text
之间选择。
我想要的是添加第三个选项 gttMasterField
(类型为 int
,不知道这是否重要)
我一直在试验文档,但没有结果。
这些似乎没有涵盖我正在寻找的确切内容,我不知道找到它的正确搜索词,这使得 google 很难找到它。它可能会在文档中的某个地方,但我也不知道要查找什么术语。
Create a Windows Forms user control that supports simple data binding
Create a Windows Forms user control that supports lookup data binding
Create a Windows Forms user control that supports complex data binding
这是一些带有注释的代码,它们也有助于解释我正在搜索的内容
public partial class gttDXManyToManyCheckedListBox : CheckedListBoxControl
{
private int _gttMasterField;
// This I want populated by setting the binding property MasterField
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
}
该项目是 dotnet framework 4.7.2
要使自定义 属性 出现在 属性 网格的(数据绑定)中,请将 BindableAttribute 设置为 true
来修饰 属性:
[Bindable(true)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
还可以选择使用所需的 DesignerSerializationVisibilityAttribute 属性进行装饰
[Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
class也可以指定默认bindable属性,设置一个DefaultBindingPropertyAttribute:
[DefaultBindingProperty("gttMasterField")]
public partial class gttDXManyToManyCheckedListBox : CheckedListBoxControl
{
private int _gttMasterField;
[Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; }
}
}
重要提示:
class 应该实现 INotifyPropertyChanged -> 可绑定的 属性 应该引发通知事件。当在Designer中设置绑定时,会生成一个BindingSource来调解绑定,但它需要涉及的对象发送更改通知(主要是确定属性值何时更新,通常为DataSourceUpdateMode.OnPropertyChanged
).
例如:
using System.Runtime.CompilerServices;
[DefaultBindingProperty("gttMasterField")]
public partial class gttDXManyToManyCheckedListBox : CheckedListBoxControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _gttMasterField;
[Bindable(true)]
public int gttMasterField
{
get { return _gttMasterField; }
set { _gttMasterField = value; NotifyPropertyChanged(); }
}
private void NotifyPropertyChanged([CallerMemberName] string PropertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
}
设置DesignerSerializationVisibility.Content
表示初始化。如果使用 BindingSource,该对象支持自身初始化,并不严格要求属性。
不过,它可以设置为 DesignerSerializationVisibility.Hidden
,具体取决于用例。