title: WPF CustomControl Commands and databinding
body: <p>Well i have a custom control called Dialog to slim it down to the problem
  Here is my vb.net code:</p>
  
  <pre><code>Public Class Dialog
      Inherits System.Windows.Controls.Control
  
  #Region "DependencyProperties"
  
      Public Shared ReadOnly OkCommandProperty As DependencyProperty = _
                             DependencyProperty.Register("OkCommand", _
                             GetType(ICommand), GetType(Dialog), _
                             New FrameworkPropertyMetadata(Nothing))
  
      Private Shared ReadOnly YesCommandPropertyKey As DependencyPropertyKey = _
                              DependencyProperty.RegisterReadOnly("YesCommand", _
                              GetType(ICommand), GetType(Dialog), _
                              New FrameworkPropertyMetadata(Nothing))
  
      Public Shared ReadOnly YesCommandProperty As DependencyProperty = _
                             YesCommandPropertyKey.DependencyProperty
  
  #End Region
  
      Public ReadOnly Property YesCommand() As ICommand
          Get
              Return CType(GetValue(ConfirmationDialog.YesCommandProperty), ICommand)
          End Get
      End Property
  
  
  
      Public Sub New()
          MyBase.New()
          SetValue(ConfirmationDialog.YesCommandPropertyKey, New RelayCommand(AddressOf Yes))
      End Sub
  
  
  #Region "Commands"
      Public Property OkCommand() As ICommand
          Get
              Return CType(GetValue(OkCommandProperty), ICommand)
          End Get
          Set(ByVal value As ICommand)
              SetValue(OkCommandProperty, value)
          End Set
      End Property
  #End Region
  
  #Region "Functions"
      Sub Ok()
          Dim command As ICommand = OkCommand
          If (command Is Nothing AndAlso command.CanExecute(Nothing)) Then
              command.Execute(Nothing)
          End If
      End Sub
  
      Sub Yes(ByVal parameter As Object)
          Ok()
          Me.Visibility = Windows.Visibility.Collapsed
      End Sub
  #End Region
  
      Shared Sub New()
          'This OverrideMetadata call tells the system that this element wants to provide a style that is different than its base class.
          'This style is defined in themes\generic.xaml
          DefaultStyleKeyProperty.OverrideMetadata(GetType(Dialog), New FrameworkPropertyMetadata(GetType(Dialog)))
      End Sub
  End Class
  </code></pre>
  
  <p>and here is my xaml:</p>
  
  <pre><code>&lt;Style TargetType="{x:Type local:Dialog}"&gt;
      &lt;Setter Property="Template"&gt;
          &lt;Setter.Value&gt;
              &lt;ControlTemplate TargetType="{x:Type local:Dialog}"&gt;
                 &lt;Button Content="Yes" Command="{Binding YesCommand}"/&gt; 
              &lt;/ControlTemplate&gt;
          &lt;/Setter.Value&gt;
      &lt;/Setter&gt;
  &lt;/Style&gt;
  </code></pre>
  
  <p>But YesCommand does not seem to work, but if i put OkCommand it works so why can't i bind to a command thats defined and set in codebehind (or the control code)?</p>