12

列の1つとしてチェックボックスがあるリストビューがあります。実際のチェックボックス以外の場所をクリックすると、期待どおり、ListViewのSelectedItemが現在選択されている行に設定されます。一方、チェックボックスをクリックした場合(最初に行をクリックせずに)、SelectedItemはnullであるか、前にクリックした行です。

誰かが私を助けることができますか....

乾杯

<ListView Width="auto" SelectionMode="Single" x:Name="listBox"  ItemsSource="{Binding MyData}" SelectedItem="{Binding Path=SelectedMyData}">
                        <ListView.View>
                            <GridView>
                                <GridViewColumn Header="Date" Width="120">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <ContentPresenter Style="{StaticResource DateTimeContent}" Content="{Binding MyDate}"/>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                                <GridViewColumn Header="Is Correct" Width="100">
                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <CheckBox IsThreeState="False" 
                                                      Checked="OnChkChecked"
                                                      Unchecked="OnChkChecked"
                                                      IsChecked="{Binding IsCorrect}"></CheckBox>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                            </GridView>
                        </ListView.View>
                    </ListView>




                                    <GridViewColumn.CellTemplate>
                                        <DataTemplate>
                                            <CheckBox IsThreeState="False" 
                                                      Checked="OnChkChecked"
                                                      Unchecked="OnChkChecked"
                                                      IsChecked="{Binding IsCorrect}"></CheckBox>
                                        </DataTemplate>
                                    </GridViewColumn.CellTemplate>
                                </GridViewColumn>
                            </GridView>
                        </ListView.View>
                    </ListView>
4

3 に答える 3

16

チェックボックスのClickイベントを処理するだけで、非常に簡単です。

private void CheckBox_Click(object sender, RoutedEventArgs e) {
    var cb = sender as CheckBox;
    var item = cb.DataContext;
    myListView.SelectedItem = item;
}
于 2010-04-09T17:43:20.947 に答える
3

チェックされているチェックボックスのインデックスを取得するためにビジュアルツリーを解析し、チェックボックスがオンになっている場合は常にコード内の特定のリストボックスアイテムを選択する必要があります

あなたも興味があるかもしれません

WPFリストボックスでチェック項目を取得するにはどうすればよいですか?

http://goalbook.wordpress.com/2009/09/05/wpf-checkedlist-control/

于 2010-04-09T14:38:59.383 に答える
0

Veerは、チェックボックスを取得するためにビジュアルツリーを解析することを提案しました。物事は私がすでにチェックボックスを持っていたということです。必要なのは、チェックボックスを保持するlistviewitemでした。さらに調査した後、このブログ投稿は私を正しい方向に向けました。チェックボックスがクリックされた行のlistviewitemを取得するためのコードは次のとおりです。

        private void chkbox_Checked(object sender, RoutedEventArgs e)
    {
        DependencyObject dep = e.OriginalSource as DependencyObject;
        while ((dep != null) && !(dep is ListViewItem))
        {
            dep = VisualTreeHelper.GetParent(dep);
        }

        if (dep != null)
        {
            IMyViewModel vm = DataContext as IMyViewModel;
            vm.SelectedThing = (MyListItemViewModel)lst.ItemContainerGenerator.ItemFromContainer(dep);
            vm.DoSomethingCommand.Execute(e.RoutedEvent.Name.ToLower());
        }
    }
于 2010-04-12T12:38:57.860 に答える