私はItemTemplateとしてButtonとTextblockを持つリストボックスを持っています。ボタンにはonClick
というイベントがあります。ListBox SelectedIndexは常に-1です
私が望むのは、クリックしたアイテムのインデックスを取得することですが、SelectedIndex
プロパティは常にListBoxに-1です!
クリックした商品のインデックスを取得するにはどうすればよいですか?
私はItemTemplateとしてButtonとTextblockを持つリストボックスを持っています。ボタンにはonClick
というイベントがあります。ListBox SelectedIndexは常に-1です
私が望むのは、クリックしたアイテムのインデックスを取得することですが、SelectedIndex
プロパティは常にListBoxに-1です!
クリックした商品のインデックスを取得するにはどうすればよいですか?
問題点は、Buttonコントロールはマウスイベントを飲み込んでクリック動作を提供しているため、ListBoxは選択が変更されたことを通知するイベントを受け取ることがないという点です。
@Alexanderが示唆しているように、MVVMスタイルのアプローチを使用して、ビューモデルでアクションを処理し、データコンテキストをパラメータとして渡すコマンドを使用できます。
また、ボタンを他のレイアウトコントロールに置き換えて、Silverlight Toolkitのジェスチャーサービスを使用するか、通常のMouseLeftButtonUp
イベントを使用することもできます。どちらの場合でも、マウスイベントが泡立ち、ListBoxで選択を処理できるようになります。
:P
あなたは現在のListItemの使用RouteCommandに関連付けられたデータオブジェクトを取得したい場合。ここではまた、少なくともListView.Resources
<RoutedCommand x:Key="ButtonCommand"/>
そして最後の書き込みハンドラでは、この
<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
}
ているCommandBindingセットアップでコマンドを定義する必要がある例
<ListView.ItemTemplate>
<DataTemplate>
<Button Margin="5,0" Command="{StaticResource ButtonCommand}"
CommandParameter="{Binding}">
</DataTemplate>
<ListView.ItemTemplate>
です
アドバンすべてのMVVMフレームワークを使用し、モデル内のすべてのコマンドとコマンドロジックを定義し、このコマンドを対応する要素にバインドするだけです。
非常にマッチ!私はちょうどボタンを削除し、同じコードでSelectionChangedイベントを作成する)私はCの新しい#とdevepolment、私のためにその最も良い方法) – MCKool