列表框内的复选框未在WP7中触发selectionchanged事件

时间:2012-07-23 12:49:20

标签: windows-phone-7

我有列表框,在里面我拿了Checkbox,在复选框内有一个文本框。 ListBox的ItemSource在View Model中绑定。我试图调用selectionchanged事件,但它没有触发。

所以我选择了ManipulationCompleted事件,当我检查Checkbox时会触发该事件。但是我没有在这次活动中获得选定的项目。但奇怪的是,如果我在列表框中选中复选框内的文本框,则不会触发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类和友元类的可观察集合,包含IsChecked和Name属性,它们绑定到CheckBox和Textbox。

1 个答案:

答案 0 :(得分:1)

您应该订阅Checkbox元素的CheckedUnchecked事件,而不是ListBox的SelectionChanged:

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

然后在代码隐藏中:

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

此处有更多信息:How to: Handle the Checked Event for the CheckBox Control