私はCommandingを学びたいと思っていますし、カスタムコマンドを使うための簡単なwpfプロジェクトをセットアップしました。私はListBoxとボタンをウィンドウ上に持っています。リストボックスにフォーカスがあり、アイテムが選択されているときは、ボタンを有効にします。有効にするには、無効にする必要があります。コマンドを使用してListBoxに反応する方法
私は別のCustomCommandsクラスでCustomCommandを定義します。
Public Shared ReceivedFocus As New RoutedCommand
と、次のように私のウィンドウで、私はそれを設定:
<CommandBinding
Command="{x:Static local:CustomCommands.ReceivedFocus}"
CanExecute="CanActivate"
Executed="ChangeSelection">
</CommandBinding>
と、次のようにListBoxのためのコマンドを使用します。
<ListBox
x:Name="lstInactive">
<i:Interaction.Triggers>
<i:EventTrigger
EventName="GotFocus">
<i:InvokeCommandAction
Command="{x:Static local:CustomCommands.ReceivedFocus}"
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
そして最後に、CanActivateルーチンは、
です。Private Sub CanActivate(sender As Object, e As CanExecuteRoutedEventArgs)
If lstInactive.SelectedIndex >= 0 Then
e.CanExecute = True
Else
e.CanExecute = False
End If
End Sub
これは機能しません。大きな問題は、CanExecute値をButtonに関連付ける方法がわかりません。 CanActivateルーチンのCanExecute値を無視して、代わりにButtonのEnabledプロパティを設定するだけですか?その場合、CanExecuteRoutedEventArgsのCanExecuteパラメータの値は何ですか?
2番目の問題は、ListBoxで項目を2回選択するまで、GotFocusイベントが発生しないことです。
私は指揮を全く理解していないかもしれませんが、これは正しいアプローチではありません。この小さなプロジェクト自体は重要ではありません。実際のプロジェクトでコマンドを使い始める前に、Commandingについて多くの記事を読んだ後でCommandingを理解することを目的としています。残念ながら、この段階では私は明らかではありません。
あなたは 'Button'は、コマンドの状態を表現したい場合は、あなたが実際にそのコマンドに' Button.Command'プロパティをバインドする必要があります。静的参照と 'CommandBinding'を使うのではなく、ビューモデルでコマンドを作成することをお勧めします。そうすることで、論理から表現を分離する明確な概念が得られます。 'ListBox.SelectedItem'をビューモデルのプロパティにバインドし、ビューモデルでコマンドが実行可能かどうかを判断します。 – dymanoid
投票の基本は何ですか? – SezMe