在DataContext中添加元素后刷新列表框

时间:2010-10-04 15:27:45

标签: c# linq-to-sql binding

下午好,

我试图在WPF中使用Linq to SQL datacontext作为ListBox。

基本上,我将Linq DataContext分配给表单的DataContext属性。然后,我将它绑定到list.ItemsSource。

一切正常,我可以在文本框中显示每个元素的详细信息(主 - 详细信息方案)。

问题是,我希望能够在列表中添加一个新元素:

private void Button_Click(object sender, RoutedEventArgs e)
    {

        Button btn = sender as Button;

        var table = lst_markets.ItemsSource as System.Data.Linq.Table<Market>;
        table.InsertOnSubmit(new Market() { IdMarket = Guid.NewGuid(), Name = txt_newmarket.Text });
        table.Context.SubmitChanges();
    }

该值确实已添加到数据库中,但ListBox未刷新。

我该怎么做才能更新清单?

谢谢,

雷米

1 个答案:

答案 0 :(得分:2)

Table<TEntity>未实现INotifyCollectionChanged,因此绑定管理器不会收到有关集合内容已更改的通知。

为您提供的一些选择:

  • 保留您从表中填写的ObservableCollection,并保持同步。当您从中添加/删除项目时,列表将通过绑定保持同步。 See this article类似的东西
  • 围绕它 - 将lst_markets.ItemsSource设置为null并在更改集合时返回到表。这将导致完全重新绑定,感觉就像一个肮脏的黑客,但应该工作。
  • 不要那样做Table<T>不是集合 - 它表示查询。而是绑定到集合。如果我没记错的话,每次迭代一个表时,它都会查询数据库,这意味着只要列表框感觉需要枚举,或者绑定管理器,或者你的ui代码都是相同的,你就会访问数据库。
  • This forum post有一个ObservableEntitySetWrapper可能会给你一些想法。

另见这个问题:How to refresh a WPF DataGrid?