2011-07-14 28 views
2

我有一個ListBox,其中Button和Textblock爲ItemTemplate。按鈕有一個onClick事件。ListBox SelectedIndex始終是-1

我要的只是獲取點擊項目的索引,但我的ListBox中的SelectedIndex屬性始終爲-1!

如何獲取點擊項目的索引?

回答

2

問題是,Button控件吞嚥鼠標事件以提供Click行爲,所以ListBox從不會收到任何事件來告訴它選擇已更改。

正如@Alexander所建議的那樣,您可以使用帶有命令的MVVM樣式方法來處理視圖模型中的操作並將數據上下文作爲參數傳遞。

或者,您可以將Button替換爲任何其他佈局控件,並使用來自Silverlight Toolkit的姿勢服務或使用常規的MouseLeftButtonUp事件。在任何一種情況下,鼠標事件都會起泡並啓用ListBox來處理選擇。

+0

感謝yu很配!我只是刪除Button,並使用相同的代碼創建SelectionChanged事件)我是一個新的C#和發展,所以它對我來說是最邪惡的方式) – MCKool

0

您可能需要實際選擇在列表框中的東西,然後:對

0

如果你想獲得與當前的ListItem使用RouteCommand相關的數據對象。下面是例子

<ListView.ItemTemplate> 
    <DataTemplate> 
    <Button Margin="5,0" Command="{StaticResource ButtonCommand}" 
         CommandParameter="{Binding}"> 
    </DataTemplate> 
<ListView.ItemTemplate> 

您也需要至少在ListView.Resources定義命令

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

在advan您可以使用任何MVVM框架,在模型中定義所有命令和命令邏輯,然後將此命令綁定到相應的元素。