WPF привязка данных к System.Data.Linq.Table <T>, как обновить интерфейс? - PullRequest
3 голосов
/ 20 августа 2009

У меня есть этот комбо, связанный с таблицей linq. Существует ли упрощенный способ обновления пользовательского интерфейса (комбинированные значения, отображаемые пользователю), когда я вставляю новую запись в таблицу linq?

В основном из того, что я понимаю, я должен был использовать ObservableCollection, но я не хочу копировать данные туда и обратно из таблицы linq в эту коллекцию, я только хочу иметь данные в таблице linq.

Это возможно?

EDIT

ОК. Вот что я сделал (и все же это не работает):

    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 Ответ

2 голосов
/ 20 августа 2009

То, что вы просите, невозможно. Вам нужен какой-то посредник, и вы уже определили правильный - ObservableCollection. Вам нужно переместить данные Linq куда-нибудь, если вы хотите, чтобы ваш пользовательский интерфейс был уведомлен об изменении. У вас должен быть один ObservableCollection, к которому вы добавляете данные Linq, а затем вы должны привязать комбинированный список к ObservableCollection, а не к таблице. Это самое простое и легковесное решение, которое вы можете создать и получать автоматические уведомления об изменениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...