2009-12-21 23 views
5

Bir DependencyProperty MyAnimal olan bir özel denetimim var - ViewModel'imdeki bir Animal Property'i MyAnimal DependencyProperty'ye bağlıyorum.wpf Veri bağlama bittiğinde nasıl söylenir?

Denetime bir TextBox ekledim, böylece bir Olayı tetikleyebilirim - Olayı ne zaman MyAnimal özelliğine ayarladığım her seferinde ayarlanmışsa - ancak MyAnimal özelliğinin Setter'ına bir kesme noktası koyarsam asla kovulmaz !

WPF Bağımlılık Özellikleri/Bağlama hakkında temel bir şey eksik tahmin ediyorum ?!

Ve benim sorum şu ki, Setter'ı kullanamazsam, ayarlandığı zaman nasıl öğrenebilirim? InitializeComponent() öğesinin sıfır değerinden sonra bir mola noktası koyarsam ve bir Olay olup olmadığını görmek için bir bağlantı kurabildiysem - DatabindingFinished veya benzerlerini koyarsam? ama ne olacağını göremiyorum ...

Yardımcı olabilir misiniz? ayarlayıcı kullanımınıza sadece orada

sayesinde

Andy

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

Bir soru: Burada

örnek kod? Bu ekli bir özellik olmalı, ama normal bir DP ... –

+0

gibi çok iyi bir nokta, şerefe - kopyala ve yapıştır gibi görünmüyor! –

cevap

5

Setter yöntemleri asla çalışma zamanı tarafından çağrılmaz. Doğrudan DependencyProperty'ye giderler. RegisterAttached() öğesine yaptığınız çağrıya ek bir argüman eklemeniz gerekecektir. Orada bir PropertyChangedCallback ekleyebilirsiniz. - Neden RegisterAttached ve Kayıt değildir kullandığınız

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

- DataBinding fiili DependencyProperty kendisi değil, CLR özelliği kullandığından aslında tamamen özelliği kapalı bırakabilirsiniz.

Özelliğin ne zaman değiştiğini görmeniz gerekiyorsa, PropertyMetadata'yı bağımlılık özelliğinizde belirtmeniz ve PropertyChangedCallback'u sağlamanız gerekir.

Ayrıntılar için Dependency Property Metadata ürününü okumanızı tavsiye ederim.