Связывание c # с полями во вложенном объекте

Кажется, я не могу найти простого, конкретного объяснения того, как привязать элементы управления в приложении WinForms к вложенным объектам с помощью привязки данных. Например:

class MyObject : INotifyPropertyChanged
{
    private string _Name;
    public string Name 
    { 
        get { return _Name; } 
        set 
        { 
            _Name = value; 
            OnPropertyChanged("Name"); 
        }    
    }

    private MyInner _Inner;
    public MyInner Inner 
    { 
       get { return _Inner; } 
       set 
       { 
           _Inner = value; 
           OnPropertyChanged("Inner"); 
       } 
    }

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

class MyInner : INotifyPropertyChanged
{
    private string _SomeValue;
    public string SomeValue 
    {
        get { return _SomeValue; } 
        set 
        { 
            _SomeValue = value; 
            OnPropertyChanged("SomeValue"); 
        } 
    }

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

Теперь представьте форму всего с двумя текстовыми полями, первое для Name, а второе для Inner.SomeValue. Я легко могу заставить привязку работать с Name, но Inner.SomeValue ненадежен. Если я заполняю объект, а затем настраиваю привязку, в текстовом поле отображается Inner.SomeValue, но я не могу его редактировать. Если я начну с нового объекта без инициализации Inner, мне не удастся получить данные для вставки в Inner.SomeValue.

Я проверил по всему MSDN, по всему StackOverflow и десяткам поисков с разными ключевыми словами. Все хотят поговорить о привязке к базам данных или DataGrids, и большинство примеров написано на XAML.

Обновление: я пробовал Marc ' полный тестовый комплект и частичный успех. Если я нажму "все поменять!" кнопку, я, кажется, могу писать обратно во внутренний объект. Однако, начиная с MyObject.Inner null, он не знает, как создать внутренний объект. Я думаю, что сейчас я могу обойти это, просто убедившись, что мои внутренние ссылки всегда установлены на допустимый объект. Тем не менее, я не могу избавиться от ощущения, что мне что-то не хватает :)

8
задан dotnetom 4 October 2014 в 08:00
поделиться