Синхронизация между сеткой данных Silverlight и связанным источником данных - PullRequest
2 голосов
/ 27 октября 2011

В Silverlight 4 я связал сетку данных с источником данных ObservableCollection.

Вот код xaml для интерфейса:

<sdk:DataGrid AutoGenerateColumns="False" Height="179" HorizontalAlignment="Left" Margin="667,10,0,0" Name="dgASupprimer" VerticalAlignment="Top" Width="334" DataContext="{Binding BindsDirectlyToSource=True, ValidatesOnNotifyDataErrors=False, Mode=OneWay}" LoadingRow="dgASupprimer_LoadingRow" />
    <Button Content="ASupprimer" Height="23" HorizontalAlignment="Left" Margin="905,205,0,0" Name="bASupprimer" VerticalAlignment="Top" Width="75" Click="bASupprimer_Click" />

И тот, который инициализирует источник данных:

public class fmLabClass
    {
        public string Nom { get; set; }
        public int Age { get; set; }
        public fmLabClass(string nom, int age) { Age = age; Nom = nom; }
    }
    System.Collections.ObjectModel.ObservableCollection<fmLabClass> fmLabObservableCollection = new System.Collections.ObjectModel.ObservableCollection<fmLabClass>() { 
            new fmLabClass("Person1",34),
            new fmLabClass("Person2",36),
            new fmLabClass("Person3",45)
        };

Когда я нажимаю кнопку bASupprimer, я хочу изменить значение атрибута на объекте и получить взамен пересмотренную сетку данных.

private void bASupprimer_Click(object sender, RoutedEventArgs e)
    {
        dgASupprimer.SelectedIndex = 2;
        ((fmLabClass)(dgASupprimer.SelectedItem)).Age++;
    }

Текущий результат заключается в том, что сетка данных не обновляется автоматически. Как я могу это сделать?

Thx

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Вы должны убедиться, что ваши свойства являются уведомлениями, если вы хотите, чтобы они передавали изменения. Полные необходимые изменения показаны ниже. Это общий шаблон, который вам необходимо знать в Silverlight, если вы хотите, чтобы связывание работало. Существуют фрагменты кода для таких свойств (для сохранения ввода).

    public class fmLabClass : INotifyPropertyChanged
    {
        private string _Nom;
        public string Nom 
        { 
            get {return _Nom;} 
            set
            {
                if (_Nom != value)
                {
                    _Nom = Value; 
                    OnPropertyChanged("Nom");
                }
            }
        }

        private int _Age;
        public int Age
        { 
            get {return _Age;} 
            set
            {
                if (_Age!= value)
                {
                    _Age= Value; 
                    OnPropertyChanged("Age");
                }
            }
        }

        public fmLabClass(string nom, int age) { Age = age; Nom = nom; }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyname)
        {
            if (PropertyChanged != null)
            {
                 PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
            }
        }
    }
0 голосов
/ 04 ноября 2011

Вы также можете посмотреть этот пример главы по привязке данных от Билли Холлиса:

http://s3.amazonnaws.com/dnrtv/dnrtv_0175.wmv

Хотя не на французском.

0 голосов
/ 27 октября 2011

Ваш fmLabClass должен реализовать INotifyPropertyChanged, чтобы сообщить UI, что в вашем объекте произошли изменения.

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