Button と Textblock を ItemTemplate として持つ Listbox があります。ボタンにはonClick
イベントがあります。
クリックした項目のインデックスを取得したいだけですがSelectedIndex
、ListBox のプロパティは常に -1 です!
クリックしたアイテムのインデックスを取得するにはどうすればよいですか?
Button と Textblock を ItemTemplate として持つ Listbox があります。ボタンにはonClick
イベントがあります。
クリックした項目のインデックスを取得したいだけですがSelectedIndex
、ListBox のプロパティは常に -1 です!
クリックしたアイテムのインデックスを取得するにはどうすればよいですか?
問題は、Button コントロールがクリック動作を提供するためにマウス イベントを飲み込んでいるため、ListBox が選択が変更されたことを伝えるイベントをまったく受信しないことです。
@Alexander が示唆するように、コマンドで MVVM スタイルのアプローチを使用して、ビュー モデルでアクションを処理し、データ コンテキストをパラメーターとして渡すことができます。
または、Button を他のレイアウト コントロールに置き換えて、Silverlight Toolkitのジェスチャ サービスを使用するか、通常のMouseLeftButtonUp
イベントを使用することもできます。いずれの場合も、マウス イベントが発生し、ListBox が選択を処理できるようになります。
リストボックスで実際に何かを選択したい場合があります:p
現在の ListItem に関連付けられたデータ オブジェクトを取得する場合は、RouteCommand を使用します。ここに例があります
<ListView.ItemTemplate>
<DataTemplate>
<Button Margin="5,0" Command="{StaticResource ButtonCommand}"
CommandParameter="{Binding}">
</DataTemplate>
<ListView.ItemTemplate>
また、少なくとも ListView.Resources で Command を定義する必要があります。
<RoutedCommand x:Key="ButtonCommand"/>
そして、このようにCommandBindingをセットアップします
<ListView.CommandBindings>
<CommandBinding Command="{StaticResource ButtonCommand}" Executed="Button_Click"/>
</ListView.CommandBindings>
最後に書き込みハンドラ
Button_Click(object sender, ExecutedRoutedEventArgs e)
{
e.Parameter// object that you Specified in CommandParameter
}
事前に、任意の MVVM フレームワークを使用し、モデルですべてのコマンドとコマンド ロジックを定義してから、このコマンドを対応する要素にバインドするだけです。