2012-07-23 38 views
0

我有列表框,裏面有複選框,複選框內有一個文本框。 ListBox的ItemSource綁定在View Model中。我正在嘗試調用selectionchanged事件,但它並未解僱。列表框內的複選框沒有觸發WP7中的selectedchanged事件

所以我採取了ManipulationCompleted事件,當我檢查複選框時觸發。但是我沒有在這個事件中獲得選定的項目。但奇怪的是,如果我在列表框中的複選框內取文本框,則不會觸發selectionchanged事件。你能幫我解釋爲什麼它不起作用嗎?以下是XAML的相同。

<ListBox x:Name="allcontacts" HorizontalAlignment="Stretch" 
            Margin="0,5,-12,0" Width="800" Grid.Row="1" 
            SelectionChanged="allcontacts_SelectionChanged"          
            ItemsSource="{Binding ContactsList,Mode=TwoWay}" 
            ManipulationCompleted="contacts_ManipulationCompleted"> 
             <ListBox.ItemTemplate> 
              <DataTemplate> 
               <StackPanel Orientation="Horizontal"> 
                <CheckBox x:Name="chkGroup" 
              IsChecked="{Binding IsChecked,Mode=TwoWay}" 
              VerticalAlignment="Top"> 
                 <StackPanel Orientation="Horizontal"> 
                  <Image x:Name="imgFriend" 
                 Source="{Binding ImageUri}" 
                 Height="30" 
                 Width="30" 
                 Margin="0 0 0 0"/> 
                  <TextBlock x:Name="txtfrdName" 
                 Text="{Binding Name,Mode=TwoWay}"/> 
                 </StackPanel> 
                </CheckBox> 
               </StackPanel> 
              </DataTemplate> 
             </ListBox.ItemTemplate> 
            </ListBox> 

ContactsList是Friend類的可觀察集合,friend類包含與CheckBox和Textbox綁定的IsChecked和Name屬性。

回答

1

您應該訂閱框元素,而不是ListBox的的SelectionChanged的CheckedUnchecked事件:這裏

private void HandleCheck(object sender, RoutedEventArgs e) 
{ 
    CheckBox cb = sender as CheckBox; 
    if (cb != null) 
    { 
     var selectedItem = cb.DataContext; 
     // do your stuff 
    } 
} 

更多信息:

<CheckBox x:Name="chkGroup" 
    IsChecked="{Binding IsChecked,Mode=TwoWay}" 
    Checked="HandleCheck" 
    Unchecked="HandleUnchecked" 
    VerticalAlignment="Top"> 

然後在後臺代碼: How to: Handle the Checked Event for the CheckBox Control

+0

感謝您的回答。但是當用戶選中複選框時,我想要列表框中的項目。選中的事件不會在列表框中提供我的項目。如果我可以訂閱selectionchanged事件,用戶選中/取消選中複選框或somwhow,是否可以讓我知道是否可以獲取選定的項目。 – 2012-07-24 06:36:09

+0

您應該使用觸發Checked事件的CheckBox的DataContext屬性。我編輯了我的答案,告訴你如何做到這一點。 – 2012-07-24 07:15:07