我将此组合绑定(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/