【问题标题】:Checkbox commanding, check - OK, Uncheck NOT ok, how do i bind the uncheck command?复选框命令,检查 - OK,Uncheck NOT ok,我如何绑定 uncheck 命令?
【发布时间】:2010-10-21 09:09:19
【问题描述】:

我在将取消选中命令附加到复选框时遇到问题。或者更正确,我不知道如何编码。这是我的检查命令代码,它应该如何使取消检查也起作用?

查看:

<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

如前所述,检查命令工作正常,并且与其连接的命令和方法被触发,我需要做什么才能使取消检查也工作? 有关信息,我正在使用 PRISM、CAL、MVVM 和 SL4 - 在 VB.NET 中

【问题讨论】:

    标签: mvvm checkbox prism behavior


    【解决方案1】:

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

    AddHandler checkableObject.Checked, AddressOf checkableObject_Checked
    

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

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 1970-01-01
      • 2012-03-06
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      相关资源
      最近更新 更多