2013-01-11 3 views
1

종속성 속성 래퍼의 접근 자 메서드에 Get/SetValue에 대한 직접 호출을 통해 무시할 수 있으므로 동작을 추가하지 않는 것이 좋습니다.종속성 속성에 setter 동작 추가

좋습니다. 따라서 을 수행하면이 작동합니까?

종속성 속성을 등록하는 동안 ValidateValueCallback 대리자를 제공 할 수 있습니다. 이것은 "0-59 범위에 초가 있어야합니다."와 같이 컨텍스트 독립적 인 검사에 충분한 단일 매개 변수 개체 값을 사용하는 우리의 출처에 대한 정적 메서드를 호출합니다.

경우에 따라 인스턴스 종속 컨텍스트 정보가 필요합니다. 예를 들어 유효한 일 범위는 월의 인스턴스 값에 따라 다릅니다.

이 경우 어떻게해야합니까? 이것은 propdp setter에서 다루기는 쉽지 않습니다.

아래에서 PropertyChanged 이벤트가 이러한 종류의 유효성 검사에 사용될 수 있으며이 사실은이 질문을 한 상황에서 내가 한 것입니다. 그러나이 단계에서는 변경이 모델에 커밋되었으므로 이전 값에 대한 액세스를 제공하기 위해 실행 취소 스택을 유지 관리해야하므로 추한 것입니다.

MSDN에는이 주제에 대한 자료가있는 것 같지만 필요한만큼 고려할 시간이 없습니다.

+1

당신은 모든 로직을 처리하기 위해 재산을 등록 할 때 즉 아마도 (새 값을 oldValue입니다) –

+0

을 소유자에 전달하고 값을 변경 같은 속성 메타 데이터에'PropertyChanged' 이벤트를 사용하지만 할 수 없습니다 * 값이 모델에 커밋 된 후 * 발생하므로 그 작업을 수행하려면 전체 돼지를 가져 와서 명령과 실행 취소 스택을 구현해야합니다. –

답변

1

속성이 변경되기 전에 CoerceValueCallback이 실행되어 해결책을 찾은 것 같아요. 더 이상 전달하기 전에 필요하다면 가로 채고 값을 변경할 수 있습니다.

아마도이 문제를 해결하고 자신의 상황에서 작동하는지 확인할 수 있습니다.

public static readonly DependencyProperty MyPropertyProperty = 
    DependencyProperty.Register("MyProperty", typeof(int), typeof(MainWindow), new PropertyMetadata(0, null, new CoerceValueCallback(CoercePropertyValue))); 

private static object CoercePropertyValue(DependencyObject d, object value) 
{ 
    if (This != That) 
    { 
     return value; 
    } 
    return 6; 
} 
+0

관련된 msdn 정보를 쉽게 검사하면 사용자가 뭔가있는 것으로 생각됩니다. 내가 집에 갈 때 나는 그것에 대해 조사 할 것이다. –

+0

당신이 나에게 묻는다면 그것은 어색해 보이지만 작동하고 공식적으로 축복받은 접근법이기도합니다. –

관련 문제