Подтвердить что ты не робот

Использование BindingSource для привязки к вложенным свойствам - или, делая объекты привязываемыми

Связывание с вложенным свойством достаточно просто:

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.

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

4b9b3361

Ответ 1

Вы должны реализовать 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.

Ответ 2

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

Оба подхода требуют EF4, хотя.

Ответ 3

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

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