.Net bindingcontext更新方法

时间:2010-06-21 21:08:01

标签: .net linq-to-sql data-binding

我在C#表单中使用数据绑定(通过LINQ to SQL),我需要知道在将新项目添加到表格时如何更新BindingContext

更具体地说,我的表单在各个字段中显示项目的属性。用户可以通过项目名称组合框遍历不同的项目。在表单的底部,我有一个创建按钮和一个删除按钮。当用户创建或删除项目时会产生问题,因为绑定上下文未使用新的项目列表进行更新。因此,用户无法遍历新项目,或者更糟糕的是,用户可以遍历并尝试修改已删除的项目。

我希望我可以在创建删除之后调用某些方法,以便更新绑定。类似于this.BindingContext[db.Projects].UpdateDammit()

感谢您的帮助, JB

2 个答案:

答案 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代码的长度减少了一半!然而,我经常发现自己对于为什么会出现某些异常行为一无所知。即便如此......我敢打赌,有一些更简单的方法可以做到这一点。