2010-05-17 4 views
1

먼저 더 나은 방향으로 나를 지적 할 수 있기 때문에 문제의 컨텍스트를 설명합니다.내용이 변경되기 전에 WPF DependencyProperty 이벤트

개체에 대해 실행 취소 다시 실행 시스템을 구현해야합니다. 객체에는 일련의 종속성 속성이 있습니다. 일부는 double, int, string이지만 일부는 DependencyObject 유형입니다. 변경되기 전에 속성 값을 저장해야합니다.이 경우 CoerceValueCallback을 추가했습니다.

public static readonly DependencyProperty MyBackgroundProperty = 
     DependencyProperty.Register("MyBackground", typeof(MyCustomizableBackground), 
      typeof(MyComponent), new UIPropertyMetadata(default(MyCustomizableBackground), null, new CoerceValueCallback(OnPropertyChanging))); 

OnPropertyChanging 값이 변경되기 전에 값을 저장합니다. MyCustomizableBackground는 일부 종속성 속성이있는 DependencyObject입니다.

문제는이 경우 사용자 지정 개체를 속성으로 사용하는 경우 OnPropertyChanging 메서드가 트리거되지 않지만 일반 형식이있을 때 트리거된다는 것입니다.

나중에 편집 : 내 질문의 일부가 매우 모호하다는 것을 깨달았으며 별도의 질문을했습니다. here. 문제의 첫 번째 부분에 대해 줄리앙은 나를 더 나은 방향으로 지적했다.

답변

1

속성 변경 콜백은 사용자의 경우 생성자의 두 번째 매개 변수입니다. 사용 된 세 번째 콜백 값은 강제 변환 콜백 값입니다.

편집 : 귀하의 의견에 대한 응답으로 MyComponent가 속성을 소유하고있는 좋은 유형인지 다시 확인하십시오. DP를 복사/붙여 넣기하고 소유 유형을 변경하는 것을 잊어 버린 후에도 비슷한 문제가있었습니다.

+0

예, 맞습니다. 제 방법의 이름이 부적절하지만 변경하기 전에 값을 저장하려고합니다. 그래서 나는 CoerceValueCallback을 사용합니다. 메소드의 이름을 변경했습니다. – morsanu

+0

예, PropertyChanged는 매개 변수에서 OldValue 및 NewValue를 제공하므로 사용자가 필요로하는 것과 정확히 일치합니다. Coerce에 대한 호출이 값이 변경되었음을 의미하지는 않습니다. –

+0

당신은 다시 맞습니다. 처음부터 이것을 설명 했어야합니다. 그러나 문제가 계속되면 내 사용자 지정 개체 속성 변경이 메서드를 호출하지 않습니다. – morsanu

관련 문제