2010-03-15 4 views
2

내 코드는 현재 다음과 같습니다C 번호 기능이 설정되어

public static DependencyProperty CurrentFooProperty = 
    DependencyProperty.Register("CurrentFoo", typeof(Foo), 
     typeof(FooHandler), new PropertyMetadata(false));   

public Foo CurrentFoo 
{ 
    get { return (Foo)GetValue(CurrentFooProperty); } 
    set { SetValue(CurrentFooProperty, value); } 
} 
:

private Foo myFoo; 

public Foo CurrentFoo 
{ 
    get { return myFoo; } 
    set { SetFoo(value); } 
} 

private void SetFoo(Foo newFoo) 
{ 
    // Do stuff 
    // Here be dragons 

    myFoo = newFoo; 
} 

것은 내가 종속성 속성에 Foo을 설정해야합니다 XAML/WPF에서 바인딩 할 수 있도록

Ive는 실제 C# 속성 집합 {} 안에서 마술을하면 안된다고 들었습니다. 그러나 호출되지 않았을 수는 있지만 값은 종속성 속성에 직접 기록됩니다. 이것이 거짓이라면, 알려주는 것이 가장 분명하고 간단한 경로처럼 보입니다.

종속성 속성에 유효성 검사 기능을 추가 할 수 있다는 것을 알고 있지만이 기능을 사용할 수 없다고 가정합니다. XAML에서 아직 바인딩 할 수없는 레거시 시스템에 변경 사항을 알릴 필요가 있습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

4
public static DependencyProperty CurrentFooProperty = DependencyProperty.Register(
    "CurrentFoo", 
    typeof(Foo), 
    typeof(FooHandler), 
    new PropertyMetadata(OnCurrentFooChanged)); 

private static void OnCurrentFooChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var currentFoo = (Foo) e.NewValue; 

    // Use 
} 
1

이 내용은 종속성 속성에 할당 된 콜백으로 처리해야합니다. 이것에 대한 적절한 장소는 실제로 여기에 무슨 일이 일어나고 있는지에 따라 달라집니다

// Do stuff 
// Here be dragons 

three callbacks that can be assigned to a Dependency Property 있습니다 - 당신은 그냥, 레거시 시스템을 통지 할 필요가 그때는 Property Changed callback를 추가하는 것이 좋습니다, 거기 알림을 추가합니다.

경우, 그러나,이 레거시 시스템을 통해 검증 금액 무언가를 수행하고, 당신의 시나리오를 주어, 나는 CoerceValue 콜백이 적절하다고 의심 ValidationCallback.

로이 용을 넣어 더 적합 할 수있다.