我有列表框,在里面我拿了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。
答案 0 :(得分:1)
您应该订阅Checkbox元素的Checked
和Unchecked
事件,而不是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