2009-12-21 2 views
5

DependencyProperty MyAnimal이있는 사용자 지정 컨트롤이 있습니다. 내 ViewModel의 Animal 속성을 MyAnimal DependencyProperty에 바인딩합니다.wpf 데이터 바인딩이 완료된 시점을 알려주는 방법은 무엇입니까?

컨트롤에 TextBox를 붙이면 이벤트를 트리거 할 수 있습니다. 이벤트를 트리거 할 때마다 MyAnimal 속성이 설정되어 있습니다. 그러나 결코 해고되지 않는 MyAnimal 속성의 Setter에 중단 점을 넣으면 !

나는 WPF Dependency Properties/Binding에 대한 근본적인 것을 놓치고 있다고 생각하니?!

그래서 제 질문은, 제가 세터를 사용할 수 없다면 어떻게 설정되었는지 알 수 있습니까? InitializeComponent() 다음에 중단 점을 넣으면 Null을 넣었고 이벤트가 연결될 수 있는지 살펴 보았습니다 (DatabindingFinished 또는 이와 유사)? 그러나 그것이 무엇인지 알 수 없습니다 ...

아무도 도와 줄 수 있습니까? 세터가 사용하기에 대해서만이

감사합니다,

앤디

public partial class ControlStrip 
{ 
    public ControlStrip() 
    { 
     InitializeComponent(); 
    } 

    public Animal MyAnimal 
    { 
     get 
     { 
      return (Animal)GetValue(MyAnimalProperty); 
     } 
     set 
     { 
      SetValue(MyAnimalProperty, value); 
     } 
    } 

    public static readonly DependencyProperty MyAnimalProperty = 
     DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip)); 

    private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) 
    { 
     var myAnimal = MyAnimal; 
     MessageBox.Show(myAnimal.Name); 
    } 

} 
+1

질문 하나 : 여기

은 몇 가지 예제 코드? 그것은 이것이 첨부 된 속성이되어야하는 것처럼 보이지 않지만 오히려 일반적인 DP는 ... –

+0

thats 아주 좋은 지적, 환호 - 복사 및 붙여 넣기! –

답변

5

setter 메서드는 런타임에서 호출하지 않습니다. DependencyProperty로 직접 이동합니다. RegisterAttached() 호출에 추가 인수를 추가해야합니다. 거기에 PropertyChangedCallback을 추가 할 수 있습니다. - 왜 RegisterAttached 및 등록하지를 사용하는

public static readonly DependencyProperty MyAnimalProperty = 
    DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip), new PropertyMetadata(AnimalChanged)); 

private static void AnimalChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
{ 
    // Do work here 
} 
4

은 - 데이터 바인딩이 실제 DependencyProperty를 자체가 아닌 CLR 속성을 사용하기 때문에 실제로, 전체 재산을 남길 수 있습니다.

속성 변경시기를 확인하려면 종속성 속성에 PropertyMetadata를 지정하고 PropertyChangedCallback을 제공해야합니다.

자세한 내용은 Dependency Property Metadata을 읽는 것이 좋습니다.

관련 문제