2012-02-09 12 views
5

zdefiniowałem właściwość w moim usercontrol tak:DependencyProperty nie wywołał

public bool IsSelected 
    { 
     get { return (bool)GetValue(IsSelectedProperty); } 
     set 
     { 
      SetValue(IsSelectedProperty, value); 
      StackPanelDetails.Visibility = value ? Visibility.Visible : Visibility.Collapsed; 
     } 
    } 

    public static readonly DependencyProperty IsSelectedProperty = 
     DependencyProperty.Register("IsSelected", typeof (bool), typeof (ucMyControl)); 

Ale kiedy ustawić jego właściwość w XAML, że chcą wywołać go (zestaw nie nazywa).

<DataTemplate><local:ucTopicItem IsSelected="False" /></DataTemplate> 

Co może być problemem?

+1

Czy klasa ucMyControl zawiera kolekcję obiektów ucTopicItem? Czy są to te same rzeczy? Rejestrujesz DP na ucMyControl, ale ustawiasz na UcTopicItem. Możesz także spróbować użyć RegisterAttached zamiast Register. – avanek

Odpowiedz

8

Setter Twojego DependencyProperty nie zostanie wywołana przez WPF, gdy DP jest ustawiony w XAML. WPF ustawi bezpośrednio DependencyProperty.

Zobacz opis MSDN XAML Loading and Dependency Properties dla wyjaśnienia, dlaczego setter nie został wywołany.

+0

Co za szkoda. Ale myślę, że to odpowiada na pytanie. – Nickolodeon

5

Należy użyć instrukcji obsługi zmienionej właściwości w swojej właściwości zależności bezpośrednio. W ten sposób można zapewnić, że zostanie wywołana, gdy ustawiony w XAML:

public static readonly DependencyProperty IsSelectedProperty = 
    DependencyProperty.Register("IsSelected", typeof(bool), typeof(ucMyControl), new PropertyMetadata(false, OnIsSelectedChanged)); 

private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    // Implement change logic 
} 
+0

Cholera, wpatrywałam się w niego: –

+0

Zrobiłem to, ale OnIsSelectedChanged nadal nie został wywołany. – Nickolodeon

+0

@Nickolodeon, musisz zarejestrować PropertyChangedCallback za pomocą argumentu 'PropertyMetadata' w [Register] (http://msdn.microsoft.com/en-us/library/ms597502.aspx). – Clemens

Powiązane problemy