2012-02-09 9 views
5

を誘発しない、私はこのように私のユーザーコントロールでプロパティを定義した:がDependencyPropertyに

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)); 

しかし、私は、XAMLでそのプロパティを設定するとき、それは(設定が呼び出されていない)、それをトリガーします。

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

何が問題なのですか?

+1

ucMyControlクラスにはucTopicItemオブジェクトのコレクションが含まれていますか?それとも同じものなのでしょうか?あなたはucMyControlにDPを登録していますが、それをucTopicItemに設定しています。 Registerの代わりにRegisterAttachedを試してみてください。 – avanek

答えて

8

DPは、XAMLで設定されている場合、あなたのしたDependencyPropertyのセッターは、WPFによって呼び出されることはありません:あなたはXAMLで設定したとき、それが呼び出されることを保証するこの方法です。 WPFはDependencyPropertyを直接設定します。

setterが呼び出されない理由については、MSDN XAML Loading and Dependency Propertiesを参照してください。

+0

残念です。しかし、私はこれが質問に答えると思う。 – Nickolodeon

5

依存関係プロパティでプロパティ変更ハンドラを直接使用する必要があります。

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

くそっちゃったよ:) –

+0

私はそれをしましたが、OnIsSelectedChangedはまだ呼び出されません。 – Nickolodeon

+0

@Nickolodeonでは、[Register](http://msdn.microsoft.com/en-us/library/ms597502.aspx)の「PropertyMetadata」引数を使用してPropertyChangedCallbackを登録する必要があります。 – Clemens

関連する問題