2010-11-19 11 views
34

Tylko krótkie pytanie, aby wyjaśnić pewne wątpliwości. Czy setery nie są uruchamiane, gdy element jest powiązany z właściwością zależności?Regulatory nie działają w oknie Właściwości zależności?

public string TextContent 
{ 
    get { return (string)GetValue(TextContentProperty); } 
    set { SetValue(TextContentProperty, value); Debug.WriteLine("Setting value of TextContent: " + value); } 
} 

public static readonly DependencyProperty TextContentProperty = 
    DependencyProperty.Register("TextContent", typeof(string), typeof(MarkdownEditor), new UIPropertyMetadata("")); 

...

<TextBox Text="{Binding TextContent}" /> 

Jak zauważyłem w moim poniżej seter nie działa

Debug.WriteLine("Setting value of TextContent: " + value); 
+0

jeśli umieścić punkt przerwania w seter można zobaczyć, gdzie robi się ustawić. – VoodooChild

+4

Jeśli potrzebujesz wykonać kod, gdy właściwość jest ustawiona, spójrz na CoerceValueCallback lub ValueChangedCallback z klasy UIMetadata. – Jens

+0

możliwe duplikaty [deklaracji właściwości WPF: XAML nie są ustawiane za pomocą Setters?] (Http://stackoverflow.com/questions/3836076/wpf-xaml-property-declarations-not-being-set-via-setters) –

Odpowiedz

46

Silnik wiązania WPF wzywa GetValue i SetValue bezpośrednio (z pominięciem ustawiające własności i pobierające). Potrzebna jest właściwość, aby mogła być obsługiwana w znacznikach XAML (i poprawnie skompilowana).

+0

Witam , Nie jestem pewien, aby zrozumieć, co mówisz? – Emixam23

+0

@ Emixam23 Dean mówi, że OP nie może wstawić instrukcji debugowania do właściwości TextContent, aby określić, czy DP jest związany poprawnie, ponieważ WPF wywoła SetValue, a nie Setter TextContent. – Dave

34

Aby utworzyć właściwość DependencyProperty, dodaj do swojego typu pole statyczne typu DepdencyProperty i wywołaj funkcję DependencyProperty.Register(), aby utworzyć instancję właściwości zależności. Nazwa DependendyProperty musi zawsze kończyć się ... Właściwością. Jest to konwencja nazewnictwa w WPF.

Aby umożliwić dostęp do niej jako normalnej właściwości .NET, należy dodać opakowanie właściwości. To opakowanie nie robi nic innego, jak wewnętrzne pobieranie i ustawianie wartości za pomocą metod GetValue() i SetValue() dziedziczonych po nazwie DependencyObject i przekazujących właściwość DependencyProperty jako klucz.

Nie dodawaj żadnej logiki do tych właściwości, ponieważ są one wywoływane tylko podczas ustawiania właściwości z kodu. Jeśli ustawisz właściwość z XAML, metoda SetValue() jest wywoływana bezpośrednio.

Każda DependencyProperty zapewnia wywołania zwrotne dla powiadomienia o zmianie, wartości przymusu i sprawdzania poprawności. Te wywołania zwrotne są rejestrowane na właściwości zależności.

źródło: http://www.wpftutorial.net/DependencyProperties.html

+0

uratowałeś mi życie! – j00hi

Powiązane problemy