Командный флажок, флажок - ОК, снять отметку НЕ в порядке, как мне связать команду отмены? - PullRequest
0 голосов
/ 21 октября 2010

У меня проблемы с присоединением команды снятия флажка к флажку. Или, вернее, я не знаю, как это кодировать. Вот мой код для команды проверки, как она должна выглядеть, чтобы снять флажок также работает?

Вид:

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

ViewModel:

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 работает нормально, а команда и метод, связанные с ней, запускаются, что мне нужно сделать, чтобы снять флажок? Для информации я использую PRISM, CAL, MVVM и SL4 - в VB.NET

1 Ответ

0 голосов
/ 22 октября 2010

Тот факт, что команда Checked работает правильно, означает, что присоединенное поведение было правильно реализовано.При этом поведение отслеживает только одно событие, указанное в этой строке:

AddHandler checkableObject.Checked, AddressOf checkableObject_Checked

Таким образом, вы подписываетесь на событие Checked элемента управления Checkbox.Поскольку вы хотите, чтобы флажок «Флажок» был снят, вам просто нужно создать другое прикрепленное поведение, используя событие Unchecked .Это предполагает, что вы хотите, чтобы другая команда выполнялась, когда кнопка отмечена / не отмечена.Если вы используете ту же команду, то привязки к свойству Command должно быть достаточно.

Надеюсь, это поможет.

...