2014-02-15 4 views
2

я хочу реализовать PropertyChanged событие, но ИДК, как использовать его в этом сценарииINotifyPropertyChanged с частным поле

class ParentClass 
{ 
    private ChildClass _childClass = new ChildClass(); 

    //How to detect that the underlying _childClass.Name value changed ? so it changed    this. 
    public string Name 
    { 
     get { return _childClass.Name; } 
    } 

    public void EditChild() 
    { 
     _childClass.Name = "SOME VALUE"; 
    } 
} 

class ChildClass : INotifyPropertyChanged 
{ 
    private string _name; 

    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

ответ

1

Поскольку Ваш вопрос не очень подробно, и вы не объясните, почему или, если вам нужно только выставить, что одно свойство или нет, есть другой подход, который может работать для вас:

Вместо обнажая одну единственную собственность, выставить весь свой класс ребенка и связать его непосредственно в коде XAML

class ParentClass : INotifyPropertyChanged 
{ 
    private ChildClass _childClass = new ChildClass(); 

    public ChildClass ChildClass 
    { 
     get { return _childClass; } 
     set { 
      if(_childClass != value) { 
       OnPropertyChanged("ChildClass"); 
       // This one is necessary so that the ChildOfChildClass property/binding gets updated accordingly 
       OnPropertyChanged("ChildOfChildClass"); 
      } 
     } 
    } 

    public ChildClass ChildOfChildClass 
    { 
     get { return (_childClass!=null)?_childClass.Child:null; } 
    } 

    public void EditChild() 
    { 
     _childClass.Name = "SOME VALUE"; 
    } 

    // Implament PropertyChanged handling in Parent class too 
    ... 
} 

Таким образом, изменения ChildClass будут напрямую передаваться в XAML/UI. Так как ваш класс ребенка реализует INotifyPropertyChanged, он отлично работает.

Редактировать: Как отредактировать выше. Хотя вам нужно будет обновить свои ParentClass свойства, чтобы добавить сеттеры, а также реализовать INotifyPropertyChanged, чтобы пользовательский интерфейс получал уведомление, когда ChildClass изменяется, как в приведенном выше примере.

+0

Извините, если в моем вопросе не хватает некоторых параметров, но что, если ChildClass содержит другой дочерний класс, и я хочу показать его дочерний объект как свойство в ParentClass? –

+0

ПРИМЕЧАНИЕ: IAM, РАБОТАЮЩАЯ В WINFORMS –

+0

В принципе, вы можете делать привязки данных в WinForms, но это сложнее и должно быть сделано в коде. Лично я делал Bindings только в WPF, поскольку он был разработан с учетом привязок. Ознакомьтесь с документацией MSDN о том, как создавать привязки WinForms. Http://msdn.microsoft.com/en-us/library/system.windows.forms.binding(v=vs.110).aspx – Tseng

Смежные вопросы