我已经阅读了一些关于在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 报错:
无法创建属性 bookProperty 的子列表。
开始编辑: 尝试这段代码,按照一些人的建议,我从第三个参数中删除了额外的元素。
bookProperty.Add(new BookProperties(){bookTitle="C#"});
textBox1.DataBindings.Add("Text", bookProperty[0], "bookTitle");
现在我收到这个错误。我之前已经收到过这个错误并搜索了解决方法,但我认为这可能对我来说太通用了,以至于我无法弄清楚我到底做错了什么。
“System.ArgumentException”类型的未经处理的异常发生在System.Windows.Forms.dll中
附加信息:这会导致集合中的两个绑定将绑定到同一属性。
结束编辑
我开始认为我的方法存在根本性问题,因为我看到类似的代码,人们说它能工作,所以我希望有人告诉我我做错了什么。请注意,这是一个Windows表单问题,不是XAML。谢谢。
修复
很抱歉上次的编辑。事实证明,我先前曾尝试使用VS设计器手动将文本框链接到数据源。在去除该数据源后,一切都正常了。感谢您的帮助!