【发布时间】:2017-07-30 16:46:34
【问题描述】:
我想创建一个简单的自定义控件(实际上是一种按钮)。我已经创建了控件,但我缺少的步骤是如何添加绑定。我的控制代码如下所示:
public partial class PopUpButton : UserControl
{
public PopUpButton()
{
InitializeComponent();
_checked = false;
DrawButton();
}
public delegate void ChangedEventHandler(object sender, EventArgs e);
public event ChangedEventHandler OnValueChanged;
private bool _checked;
private String _text;
private void UserControl1_Resize(object sender, EventArgs e)
{
DrawButton();
}
[Bindable(true)]
public bool Checked
{
get
{
return _checked;
}
set
{
_checked = value;
DrawButton();
if (OnValueChanged != null)
{
OnValueChanged.Invoke(this, new EventArgs());
}
}
}
[Bindable(true)]
public String DisplayText
{
get
{
return _text;
}
set
{
_text = value;
DrawButton();
}
}
private void DrawButton()
{
// do some stuff
}
private void PopUpButton_Click(object sender, EventArgs e)
{
_checked = !_checked;
DrawButton();
if (OnValueChanged != null)
{
OnValueChanged.Invoke(this, new EventArgs());
}
}
}
绑定到控件的调用如下所示:
regControl1.DataBindings.Clear();
regControl1.DataBindings.Add("Checked", CustomButton1, "Checked");
我知道我需要定义一个数据源和成员,但看不到如何实现它。调用上述绑定时,regControl1 会更新为“Checked”的值,但函数“OnValueChanged”始终为空,因此绑定失败,因此当“Checked”更改时,“regControl1”不会更新。
有什么想法吗?
【问题讨论】:
-
您正在尝试将
regControl1的Checked属性绑定到CustomButton的Checked属性的值?如果这是真的,那么CustomButton需要实现INotifyPropertyChanged,以便regContol1将收到CustomControl1的Checked属性更改的通知。 -
仅供参考,在这种情况下被绑定的对象是
regControl1,CustomButton1只是绑定的目标。因此,您在PopUpButton中的绑定代码不会在这里使用。 -
是的,我正在尝试将 regControl1 的属性绑定到 CustomButton 的 Checked 属性。我确实使用 INotifyPropertyChanged 方法到达了那里,但让我难过的是添加什么作为数据源。 stuartd 指出的示例是包含已经具有“数据源”属性的列表的组件。而一个不起眼的按钮没有,所以我读过的例子没有多大帮助。
标签: c# visual-studio data-binding user-controls