Метод обновления .Net bindingcontext - PullRequest
0 голосов
/ 22 июня 2010

Я использую привязку данных (через LINQ to SQL) в форме C #, и мне нужно знать, как обновить BindingContext при добавлении нового элемента в мою таблицу.

Более конкретно, у меня есть форма, которая отображает свойства проекта в различных полях. Пользователь может переходить к различным проектам через поле со списком названий проектов. Внизу формы у меня есть кнопка «Создать» и «Удалить». Проблема возникает, когда пользователь создает или удаляет проект, поскольку контекст привязки не обновляется новым списком проектов. Поэтому пользователь не может перейти к новому проекту или, что еще хуже, может перейти к и попытаться изменить проект, который был удален.

Мне бы хотелось, чтобы после create или delete я мог бы вызвать какой-либо метод, чтобы привязка обновилась. Что-то вроде this.BindingContext[db.Projects].UpdateDammit().

Спасибо за вашу помощь, JB

Ответы [ 2 ]

0 голосов
/ 23 июня 2010

Мое окончательное решение состояло в том, чтобы создать два метода для привязки и последующего повторного связывания данных:

private void bind()
{
     object dataSource = db.Projects.OrderBy(p => p.ProjectNo);
     projectNoTextBox.DataBindings.Add("Text", dataSource, "ProjectNo");
     projectNameTextBox.DataBindings.Add("Text", dataSource, "ProjectName");
     //etc.
}
private void rebind()
{
     projectNoTextBox.DataBindings.Clear();
     projectNameTextBox.DataBindings.Clear();
     //etc.
     bind();
}

В методе загрузки формы я связывал данные, а затем, после того как пользователь создал или удалил проект, я перепривязал данные.

Мой опыт работы с привязкой данных .Net заключается в том, что это большой запутанный черный ящик. Я думаю, что если бы я полностью понял это, это сэкономило бы мне очень много времени - в конце концов, когда бы я ни узнал что-то новое о привязке данных, длина моего кода GUI уменьшается вдвое! Однако я часто не понимаю, почему я получаю какое-то странное поведение. Даже с этим ... Держу пари, есть более простой способ сделать это.

0 голосов
/ 22 июня 2010

Убедитесь, что все, к чему вы привязываете, может уведомить пользовательский интерфейс о внесении изменений. Если ваш связующий контекст является коллекцией, вы можете использовать ObservableCollection

Если вы привязываете к определенным элементам коллекции, вам нужно убедиться, что элементы реализуют INotifyPropertyChanged и вы получаете уведомление при изменении значения.

...