WPF数据绑定到System.Data.Linq.Table<T>,如何更新界面?

3
我将此组合框绑定到了一个linq表。当我在linq表中插入新记录时,有没有一种轻量级的方法来更新界面(显示给用户的组合框值)?
基本上从我的理解来看,我应该使用ObservableCollection,但我不想将数据来回复制到该集合中,我只想在linq表中拥有数据。这是否可能?
编辑:
好的,这是我所做的(但仍然不起作用):
    private ObservableCollection<Categories> m_Categories;
    private ObservableCollection<Categories> Categories
    {
        get
        {
            return m_Categories;
        }
    }

在XAML中,我有以下内容:

                 <ComboBox Name="cmbCategory" 
                           ItemsSource="{Binding Categories}"
                           DisplayMemberPath="Name"
                           SelectedValuePath="Id"
                           />

所以,非常简单。
       //if i have a new category, i want to update the combo's content
        if (frmEditCategory.ShowDialog() == true)
        {
            //get the new category and add it to the ObservableCollection
            LibraryDataStore.Instance.Categories.ToList().ForEach(p => 
            {
                if (!m_Categories.Contains(p))
                {
                    m_Categories.Add(p);
                }
            });

            //update the target? is this correct?!
            BindingExpression be = cmbCategory.GetBindingExpression(ComboBox.ItemsSourceProperty);
            if (be != null)
                be.UpdateTarget();     
        }

通过调试器检查,m_Categories 包含新的类别,但它没有显示在组合框中。

另外,您是否了解有关组合框绑定的任何好的教程或博客文章?...

提前感谢您。

1个回答

2
您所要求的是不可能的。您需要某种中介者,并且您已经确定了正确的中介者-ObservableCollection。如果想在更改时通知用户界面,您必须将Linq数据移动到某个地方。您应该有一个ObservableCollection,将Linq数据添加到其中,然后将组合框绑定到ObservableCollection而不是直接绑定到表格。这是您可以创建的最简单、最轻量级的解决方案,并且仍然可以接收自动更改通知。

是的,你说得对,现在我正在尝试使用ObservableCollection。 - Teodor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接