Никто с Silverlight не работает?
Такая вот проблема у меня.
Cоздал объект ObservableCollection<string> mySource = new ObservableCollection<string>();
Напихал туда елементов: mySource.Add("111") ; mySource.Add("222") ; ...
Затем listbox.DataSource = mySource;
Работает замечательно.
Делаю следующее mySource[1]="updated";
Блеск! Немедленно вижу изменеиее в listBox!
Теперь меняем ListBox на DataGrid, а для DataSource создаем объект типа
ObservableCollection<Person> mySource = new ObservableCollection<Person>();
где Person это типичный класс с FirstName и т.д.
Создаем экземпляры класса Person, добавляем их в mySource , присваеваем коллекцию как DataSource
dataGrid.DataSource = mySource ;
Работает. Вижу в dataGrid содержимое mySource.
Теперь хочу поменять первую строку в dataGrid.
Создаю новый экземпляр класса Person типа :
Person p = new Person();
p.FirstName = "Dima";
P.Rang = "SuperStar";
....
и обнавляю первый элемент в mySource:
mySource[0] = p;
Опа, ошибка при исполнении кода, что -то вроде "недопустимая операция".
Пробую по другому:
mySource[0].FirstName = "Dima";
Ошибки нет. Но и на экране ничего не обновилось!
Кликаю на заголовок, происходит сортировка и вижу обновление.
Как можно сделать Refresh() для DataGrid ? Что не так?
Silverlight: DataGrid, ItemsSource update
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
-
- Маньяк
- Сообщения: 4203
- Зарегистрирован: 08 мар 2006, 15:45
- Откуда: Ричмонд
Re: Silverlight: DataGrid, ItemsSource update
чисто потому–что ответов нет:
для обновления елемента в коллекции можно попробовать метод setItem вместо [0] – может в этом фишка.
myDataSource.setItem(0, new Person("John", "Doe"));
И eщё, на вскидку, можно попробовать сделать Person IComparable ( пригодится
)).
Что–бы таблица обновлялась при вызове setFirstName() надо что–бы Person был Observed by the table(Observer) напрямую, или через ту–же myDataSource. Я бы выбрал второе.
StackTrace был–бы полезен,а DataGridView наверно поновее будет. Хотя не знаю, поддерживается ли он в силверлайт.
На роль DataSource больше подходит System.Data.DataTable с ним всё должно быть попроще, с него бы я и начал – чисто по аналогии со свингом.
для обновления елемента в коллекции можно попробовать метод setItem вместо [0] – может в этом фишка.
myDataSource.setItem(0, new Person("John", "Doe"));
И eщё, на вскидку, можно попробовать сделать Person IComparable ( пригодится

Что–бы таблица обновлялась при вызове setFirstName() надо что–бы Person был Observed by the table(Observer) напрямую, или через ту–же myDataSource. Я бы выбрал второе.
StackTrace был–бы полезен,а DataGridView наверно поновее будет. Хотя не знаю, поддерживается ли он в силверлайт.
На роль DataSource больше подходит System.Data.DataTable с ним всё должно быть попроще, с него бы я и начал – чисто по аналогии со свингом.
- Sea-urchin
- Завсегдатай
- Сообщения: 462
- Зарегистрирован: 18 окт 2003, 22:20
- Откуда: Vancouver
Re: Silverlight: DataGrid, ItemsSource update
С silverlight не работал, подозреваю, что там свои контролы.
Но возможно, так же как и в windows forms, надо вызвать .DataBind() чтобы обновить данные из источника.
Но возможно, так же как и в windows forms, надо вызвать .DataBind() чтобы обновить данные из источника.
- Димас
- Житель
- Сообщения: 593
- Зарегистрирован: 22 июл 2005, 16:58
- Откуда: Север->Торонто
Re: Silverlight: DataGrid, ItemsSource update
I've got it!
My person class should to inherite the interface INotifyPropertyChanged and
implement a metod onPropertyChanged that fiers an event PropertyChangedEventHandler
when a property was changed.
My person class should to inherite the interface INotifyPropertyChanged and
implement a metod onPropertyChanged that fiers an event PropertyChangedEventHandler
when a property was changed.