Как обновить DataGrid в Silverlight, когда свойство в ObserveableCollection изменилось - PullRequest
1 голос
/ 17 октября 2011

У меня есть Datagrid, привязанный к ObserveableCollection (MyClass) source1;

MyClass имеет 2 свойства: строковое имя, int AGE

Теперь у меня есть 50 объектов MyClass в коллекции, что означаету меня есть 50 строк в моей таблице данных.если я хочу увидеть все строки, мне нужно прокрутить все вокруг, и это нормально !!

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e){
int index = dataGrid.SelectedIndex;
obsCollection[index].Name="AAAAA";
}

Каждый раз, когда я нажимаю на строку, мне бы хотелось, чтобы в этой строке имя изменялось на строку Name = "AAAAAA ";

Все это работает, если я прокручиваю вверх или вниз, и строка больше не отображается в таблице данных.Каким-то образом строка получает updatet, когда она исчезает из виду и позже показывается.Когда я прокручиваюсь вокруг и возвращаюсь к этой строке, и строка снова отображается в таблице данных, значение обновляется.

Но я хочу мгновенного изменения !!Просто выберите / щелкните по строке, и имя изменится на «AAAAAA».Я не хочу, чтобы эта строка была вне поля зрения, чтобы получить обновление.

edit: я не могу использовать datagrid.itemsssource = null;потому что я бы получил бесконечный цикл при выделении

1 Ответ

2 голосов
/ 17 октября 2011

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

  1. Вам необходимо создать класс Employee и реализовать INotifyPropertyChanged.

    public class Employee : INotifyPropertyChanged
    {
        public string FirstName
        {
            get { return this._firstName; }
            set 
            {        
                this._firstName = value;
                this.NotifyPropertyChanged("FirstName");
            }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
    
  2. Использовать Employee в качестве универсального типа параметра для ObservableCollection следующим образом ObservableCollection<Employee>

  3. Теперь, когда вы измените значение employee в ObservableCollection, значение будет обновлено доПользовательский интерфейс для вас.

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