2014-01-16 3 views
0

현재 UI가 업데이트되지 않아서 업데이트하고 싶습니다. 도와 주시면 감사하겠습니다. http://www.codeproject.com/Articles/10072/Simulated-Multiple-Inheritance-Pattern-for-C2 클래스 상속 NotifyPropertyChanged는 UI 업데이트가 실패합니다.

내 실제 응용 프로그램의 모양이 페이지에서 권장

나는 시뮬레이션 "2 개 클래스 상속"가 다음

public class Item : INotifyPropertyChanged 
{ 
    private bool _isVisible; 
    public bool IsVisible 
    { 
     get 
     { 
     return _isVisible; 
     } 
     set 
     { 
     if (_isVisible == value) 
      return; 

     _isVisible = value; 
     OnPropertyChanged("IsVisible"); 
     } 
    } 

    //NotifyPropertyChanged Implementation removed so the focus stays on problem... 
} 

public class ObjectItem : INotifyPropertyChanged 
{ 
    private bool _isExpanded; 
    public bool IsExpanded 
    { 
     get 
     { 
     return _isExpanded; 
     } 
     set 
     { 
     if (_isExpanded== value) 
      return; 

     _isExpanded= value; 
     OnPropertyChanged("IsExpanded"); 
     } 
    } 

    //NotifyPropertyChanged Implementation removed so the focus stays on problem... 
} 

public class CombinedItem : Item 
{ 
    private readonly ObjectItem _objectItem = new ObjectItem(); 

    public bool IsExpanded 
    { 
     get { return _objectItem.IsExpanded; } 
     set { _objectItem.IsExpanded = value; } 
    } 

    public static implicit operator ObjectItem(CombinedItem combinedItem) 
    { 
     return combinedItem._objectItem; 
    } 
} 

내가 지금 문제를 직면하고 그 속성으로 IsExpanded doesnt는 DataContext로 CominedItem을 가지고있을 때 UI에 올바르게 알립니다. IsVisible 속성은 예상대로 작동합니다.

public class CombinedItem : Item 
{ 
    private readonly ObjectItem _objectItem = new ObjectItem(); 

    public bool IsExpanded 
    { 
     get { return _objectItem.IsExpanded; } 
     set 
     { 
     if (_objectItem.IsExpanded == value) 
      return; 

     _objectItem.IsExpanded = value; 
     OnPropertyChanged("IsExpanded"); 
     } 
    } 

    public static implicit operator ObjectItem(CombinedItem combinedItem) 
    { 
     return combinedItem._objectItem; 
    } 
} 

이 방법으로 다시 OnPropertyChanged를 ("으로 IsExpanded")을 작성하지 않도록하는 방법이 있나요 :

내가 다음에 CominedItem을 변경 한 문제를 극복하기 위해. (나는 libaries/tools이 있다는 것을 알고 있습니다. 단지 쓸 필요가없고 속성을 선언해야합니다. pls는 그 속성을 선언해야합니다)

+0

에 결합 할 수있다. – Sheridan

답변

1

실제로 ObjectItem PropertyChanged를 구독하고 MatchedItem에서 일치하는 이벤트를 발생시켜야합니다 .

_objectItem.IsExpanded를 CombinedItem.IsExpanded를 사용하지 않고 수정하면 UI에 변경 내용이 표시되지 않습니다.

속성을 감싸고 싶다면 마술 속성/도구가 없으면 변경 알림을 처리해야합니다. 그냥 일반적인 클래스에 속성으로 해당 클래스를 추가 할 때

public class CombinedItem : Item 
{ 
    private readonly ObjectItem _objectItem = new ObjectItem(); 

    public CombinedItem() 
    { 
     _objectItem.PropertyChanged += (s, e) => 
     { 
      if (e.PropertyName == "IsExpanded") 
       OnPropertyChanged("IsExpanded"); 
     } 
    } 

    public bool IsExpanded 
    { 
     get { return _objectItem.IsExpanded; } 
     set { _objectItem.IsExpanded = value; } 
    } 

    public static implicit operator ObjectItem(CombinedItem combinedItem) 
    { 
     return combinedItem._objectItem; 
    } 
} 
1

당신은,이 미친 짓 속성으로 ObjectItem 노출하고

public class CombinedItem : Item 
{ 
    private readonly ObjectItem _objectItem = new ObjectItem(); 

    public bool IsExpanded 
    { 
     get { return _objectItem.IsExpanded; } 
     set { _objectItem.IsExpanded = value; } 
    } 

    public ObjectItem ObjectItem 
    { 
     get { return _objectItem; } 
    } 

    public static implicit operator ObjectItem(CombinedItem combinedItem) 
    { 
     return combinedItem._objectItem; 
    } 
} 



<Expander IsExpanded={Binding ObjectItem.IsExpanded}/> 
관련 문제