NotifyPropertyChanged при привязке к источнику данных сетки данных в RIA Silverlight - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть текстовое поле и сетка данных в проекте Silverlight. Текстовое поле должно быть включено, если количество элементов в сетке данных равно 0 или сумма поля в источнике данных источника = 0.

Я связал значение isEnabled текстового поля с набором данных ItemsSource.SourceCollection, который дает мне IEnumerable. Я сделал конвертер, который преобразует эту модель данных в bool.

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

Я предполагаю, что это как-то связано с уведомлением об изменениях свойств моей модели данных, но я не знаю.

Есть мысли о том, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2011

Я задал похожий вопрос, и, когда Люк ответил, вам нужна реализация события INotifyPropertyChanged, если нет, изменения элементов не произойдут. Как сделать ячейку в таблице данных доступной только для чтения на основе содержимого другой ячейки в SL4?

0 голосов
/ 17 февраля 2011

Да, когда вы связываетесь со вспомогательным свойством объекта, вам необходимо событие PropertyChanged этого конкретного свойства, чтобы цель могла обновить его значение.

В вашем примере ItemsSource необходимо вызвать событие PropertyChanged свойства SourceCollection.

То, что вы можете сделать, это привязать к ItemsSource, который будет запущен, а затем в вашем конвертере использовать значение Sourcecollection.

например:

    <sdk:DataGrid Name="dg" ItemsSource="{Binding}" AutoGenerateColumns="True" VerticalAlignment="Top"/>
    <TextBox Text="{Binding ElementName=dg, Path=ItemsSource.Count}" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>

код:

        _items = new ObservableCollection<SomeClass>();
        _items.Add(new SomeClass() { Name = "a" });
        _items.Add(new SomeClass() { Name = "b" });
        _items.Add(new SomeClass() { Name = "c" });

        DataContext = _items;

    private void testButton_Click(object sender, RoutedEventArgs e)
    {
        _items.Add(new SomeClass(){Name = "ha"});

    }
...