我已经阅读了关于Stack Overflow和其他地方的许多问题,这些问题描述了如何将文本框绑定到类,但是在编译时如果没有收到VS的错误,我似乎甚至无法使基础工作。
(1)我要完成的是显示一个类的属性的文本。
(2)当用户修改该文本时,我希望该属性自动更新。
不幸的是,我什至无法超越(1)。
班级:
class BookProperties : INotifyPropertyChanged
{
private string _bookTitle;
public string bookTitle { get { return _bookTitle; } set { SetField(ref _bookTitle, value, "bookTitle"); } }
#region handle property changes
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
protected bool SetField<T>(ref T field, T value, string propertyName)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
#endregion
}
类的初始化器:
BindingList<BookProperties> bookProperty = new BindingList<BookProperties>();
与文本框的连接:
textBox1.DataBindings.Clear();
textBox1.DataBindings.Add("Text", bookProperty, "bookProperty.bookTitle");
我也尝试过这个:
textBox1.DataBindings.Clear();
textBox1.DataBindings.Add("Text", bookProperty, "bookProperty[0].bookTitle");
Visual Studio引发以下错误:
无法创建field bookProperty的子级列表。
开始编辑:尝试这段代码,我建议从第三个参数中删除其他元素。
bookProperty.Add(new BookProperties(){bookTitle="C#"});
textBox1.DataBindings.Add("Text", bookProperty[0], "bookTitle");
现在,我收到此错误。我以前收到过它,并在寻找解决方案,但认为对我来说太笼统了,无法弄清楚我到底在做什么错。
System.Windows.Forms.dll中发生了类型为'System.ArgumentException'的未处理异常
附加信息:这将导致集合中的两个绑定绑定到同一属性。
结束编辑
我开始认为我的方法存在根本上的错误,因为我已经看到人们说的类似代码有效,所以我希望有人可以告诉我我做错了什么。请注意,这是Windows窗体问题,而不是XAML。谢谢。
已修正对不起,最后一次编辑。事实证明,我以前曾尝试使用VS设计器将文本框手动链接到数据源。删除该数据源后,一切正常。感谢您的帮助!
试试这个:
bookProperty.Add(new BookProperties(){bookTitle="C#"});
textBox1.DataBindings.Add("Text", bookProperty[0], "bookTitle");
第二个参数是应该显示的源,第三个参数是源类的属性。还要确保bookProperty列表中有项目。
希望会有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句