I have this combo bound to a linq table.
Is there a lightweight way to update the UI (combo values that are displayed to the user) when I insert a new record in the linq table?
Basically from what I understand I should have used an ObservableCollection, but I don’t want to copy the data back & forth from the linq table to that collection, I only want to have data in the linq table.
Is that possible?
EDIT
OK Here is what i have done (and still it doesn’t work):
private ObservableCollection<Categories> m_Categories;
private ObservableCollection<Categories> Categories
{
get
{
return m_Categories;
}
}
in the XAML i have:
<ComboBox Name="cmbCategory"
ItemsSource="{Binding Categories}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
/>
So, pretty simple.
//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();
}
Checked with the debugger, m_Categories contains the new category, but it doesn’t show up in the combo.
Also, do you know any good tutorial or blog post about combo binding?…
Thank you in advance
What you are asking for is not possible. You need a mediator of some sort, and you have already identified the correct one-
ObservableCollection. You have to move the Linq data somewhere if you want your user interface to be notified when it changes. You should have oneObservableCollection, which you add your Linq data to, and then you should bind the combo-box to theObservableCollectionrather than directly to the table. That is the simplest, most light-weight solution you can create and still receive automatic change notifications.