views:

304

answers:

1

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

+2  A: 

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 one ObservableCollection, which you add your Linq data to, and then you should bind the combo-box to the ObservableCollection rather than directly to the table. That is the simplest, most light-weight solution you can create and still receive automatic change notifications.

Charlie
Yes, you're correct, now i am trying to use ObservableCollection.
Teodor
...and it works, and it's not so difficult to implement.
Teodor