Использование BindingSource для привязки к вложенным свойствам или создание привязываемых объектов - PullRequest
17 голосов
/ 21 февраля 2011

Привязка к вложенному свойству достаточно проста:

checkBox1.DataBindings.Add(new Binding("Checked", bindingSource, "myProperty")); //Normal binding
checkBox2.DataBindings.Add(new Binding("Checked", bindingSource, "myProperty.innerProperty")); //Nested property

Однако при изменении myProperty.innerProperty события не генерируются - BindingSource никогда не уведомляется об изменении.

Я прочитал , что решение заключается в ", убедитесь, что когда объект innerProperty вызывает событие PropertyChanged, класс MyProperty, содержащий innerProperty, захватывает событие, а также вызывает собственное событие PropertyChanged. "

Однако структура сущностей не делает это для меня , и я бы предпочел не проходить каждый экземпляр каждого класса и не настраивать собственный метод для каждого свойства навигации, просто чтобы сделать my классы привязываемые. Есть ли достойный обходной путь, чтобы сделать объекты привязываемыми?

Ответы [ 3 ]

2 голосов
/ 26 февраля 2011

Вы должны реализовать INotifyPropertyCHanged в своем классе.

Ваше свойство должно выглядеть примерно так.

private bool _checked;
    public bool Checked
    {
        get { return _checked; }
        set
        {
            if (value != _checked)
            {
                _checked = value;
                OnPropertyChanged("Checked");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public virtual void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyCHanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

Я не уверен, работает ли это для winforms.Работает для WPF и Silverlight.

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

Изменены ли ваши свойства в том же контексте, который используется в пользовательском интерфейсе?

Если это так, отредактируйте файл T4, который вы используете для создания своих сущностей.
- Сделайте так, чтобы он создавал объекты INotifyPropertyChanged со свойствами, которые уведомляют об изменениях и имеют явное поле позади.

0 голосов
/ 03 марта 2011

Вы можете попробовать POCO Entity Generator или функцию EF Code-First, которая все еще находится в CTP .

Для обоих подходов требуется EF4.

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