0

リストボックスがあり、その中にチェックボックスがあり、チェックボックス内にテキストボックスがあります。ListBox の ItemSource は View Model にバインドされています。selectionchanged イベントを呼び出そうとしていますが、起動していません。

そのため、チェックボックスをチェックすると発生する 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 クラスには IsChecked と Name プロパティが含まれ、CheckBox と Textbox にバインドされます。

4

1 に答える 1

1

ListBox の SelectionChanged の代わりに、Checkbox 要素のCheckedおよびイベントをサブスクライブする必要があります。Unchecked

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

詳細はこちら:方法: CheckBox コントロールの Checked イベントを処理する

于 2012-07-23T13:01:12.553 に答える