我在C#表单中使用数据绑定(通过LINQ to SQL),我需要知道在将新项目添加到表格时如何更新BindingContext
。
更具体地说,我的表单在各个字段中显示项目的属性。用户可以通过项目名称组合框遍历不同的项目。在表单的底部,我有一个创建按钮和一个删除按钮。当用户创建或删除项目时会产生问题,因为绑定上下文未使用新的项目列表进行更新。因此,用户无法遍历新项目,或者更糟糕的是,用户可以遍历并尝试修改已删除的项目。
我希望我可以在创建或删除之后调用某些方法,以便更新绑定。类似于this.BindingContext[db.Projects].UpdateDammit()
。
感谢您的帮助, JB
答案 0 :(得分:0)
确保绑定到的任何内容都可以通知UI已完成更改。如果您的绑定上下文是一个集合,您可以使用ObservableCollection
如果绑定到集合的特定元素,则需要确保元素实现INotifyPropertyChanged
,并在值更改时发出通知。
答案 1 :(得分:0)
我的最终解决方案是创建两个绑定方法,然后重新绑定数据:
private void bind()
{
object dataSource = db.Projects.OrderBy(p => p.ProjectNo);
projectNoTextBox.DataBindings.Add("Text", dataSource, "ProjectNo");
projectNameTextBox.DataBindings.Add("Text", dataSource, "ProjectName");
//etc.
}
private void rebind()
{
projectNoTextBox.DataBindings.Clear();
projectNameTextBox.DataBindings.Clear();
//etc.
bind();
}
在加载表单方法中,我会绑定数据,然后在用户创建或删除项目后,我会重新绑定数据。
我对.Net数据绑定的经验是,这是一个令人困惑的黑盒子。我认为,如果我完全理解它,它会节省我太多的时间 - 毕竟,有时候我学习一些关于数据绑定的新东西,我的GUI代码的长度减少了一半!然而,我经常发现自己对于为什么会出现某些异常行为一无所知。即便如此......我敢打赌,有一些更简单的方法可以做到这一点。