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

时间:2009-08-20 13:11:29

标签: wpf data-binding combobox

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

基本上从我的理解我应该使用ObservableCollection,但我不想将数据复制回来&amp;从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包含新类别,但它不会显示在组合中。

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

提前谢谢

1 个答案:

答案 0 :(得分:2)

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