我将此组合绑定到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包含新类别,但它不会显示在组合中。
另外,你知道关于组合绑定的任何好的教程或博客文章吗?...
提前谢谢
答案 0 :(得分:2)
你要求的是不可能的。您需要某种调解员,并且您已经确定了正确的调解员 - ObservableCollection
。如果您希望在更改时通知用户界面,则必须将Linq数据移动到某处。您应该有一个ObservableCollection
,将Linq数据添加到该ObservableCollection
,然后您应该将组合框绑定到{{1}}而不是直接绑定到表。这是您可以创建的最简单,最轻量级的解决方案,并且仍会收到自动更改通知。