WPF CustomControl命令和数据绑定

时间:2010-02-15 10:53:16

标签: wpf vb.net commandbinding

我有一个名为Dialog的自定义控件,以减轻问题 这是我的vb.net代码:

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

这是我的xaml:

<Style TargetType="{x:Type local:Dialog}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:Dialog}">
               <Button Content="Yes" Command="{Binding YesCommand}"/> 
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

但YesCommand似乎不起作用,但如果我把OkCommand它工作,那么为什么我不能绑定到在代码隐藏(或控制代码)中定义和设置的命令?

1 个答案:

答案 0 :(得分:1)

你的DataContext是什么?你需要设置它吗?

Public Sub New()
    MyBase.New()
    SetValue(ConfirmationDialog.YesCommandPropertyKey, New RelayCommand(AddressOf Yes))
    DataContext = Me
End Sub