NotifyPropertyChanged при привязке к источнику элементов данных в Silverlight RIA

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

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

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

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

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


person olve    schedule 17.02.2011    source источник


Ответы (2)


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

person Nair    schedule 18.02.2011
comment
Это модель данных RIA, наследуемая от Entity, которая реализует INotifyPropertyChanged. - person olve; 18.02.2011
comment
Не могли бы вы поставить точку останова в конвертере и отладить код и посмотреть, вызывается ли конвертер при изменении коллекции? - person Nair; 20.02.2011

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

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

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

eg:

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

code:

        _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"});

    }
person Luc Bos    schedule 17.02.2011
comment
Изменение привязки к ItemsSouce ничего не меняет. - person olve; 18.02.2011
comment
Я отредактировал это для вас, чтобы было понятнее. + не забудьте использовать observableCollection .. - person Luc Bos; 18.02.2011
comment
Я использую PagedCollectionViews. Может ли это иметь какое-то отношение к этому? - person olve; 21.02.2011
comment
Я создал образец, используя решение Luc с PagedCollectionView, и оно сработало. Взгляните на csharpramble.wordpress.com - person Nair; 22.02.2011