2010-10-21 101 views
0

我在附加取消選中命令到複選框時遇到了問題。或者更正確,我不知道如何編碼。這是我的檢查命令的代碼,它應該如何取消選中也可以工作?複選框命令,檢查 - 確定,取消選中不好,我如何綁定取消選中命令?

查看:

<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中

回答

0

Checked命令正常工作的事實意味着附加行爲已正確實施。這就是說,行爲只監視你在這一行指定單個事件:

AddHandler checkableObject.Checked, AddressOf checkableObject_Checked 

因此,您訂閱的Checked事件CheckBox控件的。由於您希望控制複選框未被選中,您只需使用Unchecked事件創建另一個附加行爲。這假設你想要一個不同的命令在按鈕被選中/取消選中時執行。如果您使用相同的命令,則綁定到Command屬性應該就足夠了。

我希望這會有所幫助。

相關問題