复选框命令,检查 - 确定,取消选中不正常,如何绑定uncheck命令?

时间:2010-10-21 09:09:20

标签: mvvm checkbox prism behavior

我在将uncheck命令附加到复选框时遇到问题。或者更正确,我不知道如何编码。这是我的check命令的代码,如何取消选中它还能工作?

查看:

<CheckBox commands:Checked.Command="{Binding CheckCommand}"
IsChecked="False"></CheckBox>

视图模型:

Private _CheckCommand As DelegateCommand(Of Object)

CheckCommand = New DelegateCommand(Of Object)(AddressOf Checked)

Private Sub Checked(ByVal parameter As Object)

End Sub

命令:

Public Class ToggleCheckedCommandBehaviour
    Inherits CommandBehaviorBase(Of CheckBox)

    Public Sub New(ByVal checkableObject As CheckBox)
        MyBase.New(checkableObject)
        AddHandler checkableObject.Checked, AddressOf checkableObject_Checked
    End Sub

    Private Sub checkableObject_Checked(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
        CommandParameter = TargetObject.Name
        ExecuteCommand()
    End Sub
End Class

Public NotInheritable Class Checked

    Private Sub New()
    End Sub

    Private Shared ReadOnly SelectedCommandBehaviorProperty As DependencyProperty = _
    DependencyProperty.RegisterAttached("SelectedCommandBehavior", _
                                        GetType(ToggleCheckedCommandBehaviour), _
                                        GetType(Checked), _
                                        Nothing)

    Private Shared ReadOnly CommandProperty As DependencyProperty = _
    DependencyProperty.RegisterAttached("Command", _
                                        GetType(ICommand), _
                                        GetType(Checked), _
                                        New PropertyMetadata(AddressOf OnSetCommandCallback))


    Public Shared Sub SetCommand(ByVal CheckBox As CheckBox, ByVal command As ICommand)
        CheckBox.SetValue(CommandProperty, command)
    End Sub

    Public Shared Function GetCommand(ByVal CheckBox As CheckBox) As ICommand
        Return TryCast(CheckBox.GetValue(CommandProperty), ICommand)
    End Function

    Private Shared Sub OnSetCommandCallback(ByVal dependencyObject As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
        Dim CheckBox = TryCast(dependencyObject, CheckBox)
        If Not CheckBox Is Nothing Then
            Dim behavior = GetOrCreateBehavior(CheckBox)
            behavior.Command = TryCast(e.NewValue, ICommand)
        End If
    End Sub

    Private Shared Function GetOrCreateBehavior(ByVal CheckBox As CheckBox) As ToggleCheckedCommandBehaviour
        Dim behavior = TryCast(CheckBox.GetValue(SelectedCommandBehaviorProperty), ToggleCheckedCommandBehaviour)
        If behavior Is Nothing Then
            behavior = New ToggleCheckedCommandBehaviour(CheckBox)
            CheckBox.SetValue(SelectedCommandBehaviorProperty, behavior)
        End If
        Return behavior
    End Function

End Class
End Namespace

如上所述,check命令工作正常,连接到它的命令和方法会触发,我还需要做什么才能取消选中它? 有关信息,我在VB.NET中使用PRISM,CAL,MVVM和SL4

1 个答案:

答案 0 :(得分:0)

Checked命令工作正常意味着已正确实现附加行为。也就是说,该行为仅监视您在此行中指定的单个事件:

AddHandler checkableObject.Checked, AddressOf checkableObject_Checked

因此,您正在订阅Checkbox控件的Checked事件。由于您希望控制Checkbox未选中,因此您只需使用Unchecked事件创建另一个附加行为。这假设您希望在选中/取消选中按钮时执行不同的命令。如果使用相同的命令,则绑定到Command属性就足够了。

我希望这会有所帮助。