2011-07-14 18 views
2

私はItemTemplateとしてButtonとTextblockを持つリストボックスを持っています。ボタンにはonClickというイベントがあります。ListBox SelectedIndexは常に-1です

私が望むのは、クリックしたアイテムのインデックスを取得することですが、SelectedIndexプロパティは常にListBoxに-1です!

クリックした商品のインデックスを取得するにはどうすればよいですか?

答えて

2

問題点は、Buttonコントロールはマウスイベントを飲み込んでクリック動作を提供しているため、ListBoxは選択が変更されたことを通知するイベントを受け取ることがないという点です。

@Alexanderが示唆しているように、MVVMスタイルのアプローチを使用して、ビューモデルでアクションを処理し、データコンテキストをパラメータとして渡すコマンドを使用できます。

また、ボタンを他のレイアウトコントロールに置き換えて、Silverlight Toolkitのジェスチャーサービスを使用するか、通常のMouseLeftButtonUpイベントを使用することもできます。どちらの場合でも、マウスイベントが泡立ち、ListBoxで選択を処理できるようになります。

+0

非常にマッチ!私はちょうどボタンを削除し、同じコードでSelectionChangedイベントを作成する)私はCの新しい#とdevepolment、私のためにその最も良い方法) – MCKool

0
あなたが実際に、あなたのリストボックスで何かを選択することをお勧めします

:P

0

あなたは現在の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フレームワークを使用し、モデル内のすべてのコマンドとコマンドロジックを定義し、このコマンドを対応する要素にバインドするだけです。

関連する問題