myUserControl
包含两个控件。一个textbox
和一个标签。此用户控件位于类库项目中。它将用于其他几个项目。
我会像这样绑定。
myControl1.Databindings.Add("DataSource",myObject,"PropertyName");
在这里,PropertyName
将直接与文本框绑定(我成功了),并在myObject
中定义了一个属性,以使用PropertyName
获取标签名称。因此,虽然userControl正在设置标签和文本框,但它需要整个绑定来绑定标签和文本框数据。
我所做的就是在这里(在控制中):
private object dataSource;
[DefaultValue("")]
public Object DataSource
{
get
{
return dataSource;
}
set
{
dataSource = value;
OnPropertyChanged(new PropertyChangedEventArgs("DataSource"));
BindControls();
if (dataSource != null)
{
textBox1.Text = dataSource.ToString();
}
}
}
//Method to bind datasource with controls
public void BindControls()
{
if (this.DataBindings.Count > 0)
{
//Get the instance of the binded object
object myObj = this.DataBindings[0].DataSource as object;
//Get binded field name as string
string bindingField = this.DataBindings[0].BindingMemberInfo.BindingField;
//Get Type of the binded object
Type t1 = myObj.GetType();
//Get property information for the binded field
PropertyInfo property = t1.GetProperty(bindingField);
//Get text value for label
LabelText = property.GetAttribute<DisplayNameAttribute>(false).DisplayName;
textBox1.ForeColor = Color.Black;
//If textbox data is null or empty, get descrition or comment as the textbox text.
if (string.IsNullOrEmpty(dataSource.ToString()))
{
dataSource = property.GetAttribute<DescriptionAttribute>(false).Description;
textBox1.ForeColor = Color.DarkGray;
}
}
}
我第一次从FORM使用此控件绑定DataSource时,虽然textbox包含正确的值,但标签文本为空。我找到的原因,DataBinding仍为空。
在我的表单中,我使用了一个复选框来切换对象值。当我检查该值时,Usercontrol获取数据绑定,然后一切正常。
答案 0 :(得分:0)
问题在于你正在筹集的财产变化。 该字符串应与属性名称相同。 尝试这样的事情......
public string Name
{
get { return m_Name; }
set
{
if (m_Name != value)
{
m_Name = value;
OnChange("Name");
}
}
}