Собственность изменилась не стреляя - PullRequest
0 голосов
/ 24 октября 2010

У меня странная ситуация:

в проекте .NET CF есть класс (назовите его A), который имеет следующую структуру:

public partial class A: Form, INotifyPropertyChanged
{
//for simplicity stripping off everything unrelated to this problem

        private int _SelectedRowsCount = 0;
        public int SelectedRowsCount
        {
            get { return _SelectedRowsCount; }
            set
            {
                _SelectedRowsCount = value;
                OnPropertyChanged("SelectedRowsCount");
            }
        }

        public bool enableCollectionButton
        {
            get { return SelectedRowsCount > 0; }
        }

//....
//
//


         void SomeMethod()
{
 //for simplicity:
SelectedRowsCount = 1; //<- HERE NOT FIRING Propertychanged for enableCollectionButton
}
}

Класс правильно реализуетИнтерфейс INotifyPropertyChanged, который заставляет свойство SelectedRowsCount запускать уведомление об изменении свойства (я оценил это с помощью отладчика).Свойство enableCollectionButton привязано к некоторому элементу управления, например так:

someButton.DataBindings.Add("Enabled", this, "enableCollectionButton");

Но свойство enableCollectionButton не изменяется (хотя и зависит от значения SelectedRowsCount).Это свойство должно оцениваться при изменении свойства SelectedRowsCount, НО НЕТ !!!

Почему это не работает, что мне не хватает ??

Заранее спасибо

1 Ответ

0 голосов
/ 24 октября 2010

Попробуйте это

public partial class A: Form, INotifyPropertyChanged
{
//for simplicity stripping off everything unrelated to this problem

    private int _SelectedRowsCount = 0;
    public int SelectedRowsCount
    {
        get { return _SelectedRowsCount; }
        set
        {
            _SelectedRowsCount = value;
            OnPropertyChanged("SelectedRowsCount");
            OnPropertyChanged("enableCollectionButton"); //This changes too !
        }
    }

    public bool enableCollectionButton
    {
        get { return SelectedRowsCount > 0; }
    }
}

Что происходит, так это то, что вы привязываетесь к свойству enableCollectionButton, но не уведомляете BindingManager об изменении на enableCollectionButton, а об изменении на SelectedRowsCount. BindingManager не знает, что они связаны!

Также попробуйте использовать Соглашения Microsoft о присвоении имен , enableCollectionButton должно быть EnableCollectionButton

...