我将此组合绑定(bind)到 linq 表。
当我在 linq 表中插入新记录时,是否有一种轻量级的方法来更新 UI(显示给用户的组合值)?

基本上根据我的理解,我应该使用 ObservableCollection,但我不想将数据从 linq 表来回复制到该集合,我只想在 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 包含新类别,但它没有显示在组合中。

另外,您知道关于组合绑定(bind)的任何好的教程或博客文章吗?...

先感谢您

最佳答案

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

关于WPF 数据绑定(bind)到 System.Data.Linq.Table<T>,如何更新接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1306101/

10-17 02:45