代码之家  ›  专栏  ›  技术社区  ›  ozczecho

wpf listview selecteditem为空

  •  12
  • ozczecho  · 技术社区  · 15 年前

    我有一个列表视图,其中一列有一个复选框。如果单击实际复选框以外的任何位置,则列表视图的selecteditem将按预期设置为当前选定行。另一方面,如果单击复选框(不首先单击行),则selecteditem为空或之前单击的行。

    有谁能帮我…

    干杯

    <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>
    
    3 回复  |  直到 13 年前
        1
  •  16
  •   majocha    15 年前

    很简单,只需处理复选框上的单击事件:

    private void CheckBox_Click(object sender, RoutedEventArgs e) {
        var cb = sender as CheckBox;
        var item = cb.DataContext;
        myListView.SelectedItem = item;
    }
    
        2
  •  3
  •   Community Mohan Dere    8 年前

    必须分析可视化树以获取选中复选框的索引,并在选中某个复选框时选择代码中的特定列表框项

    你也可能对

    How to get checked items in a WPF ListBox?

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

        3
  •  0
  •   ozczecho    15 年前

    Veer建议解析可视化树以获取复选框。事情是我已经有了复选框。我需要的是包含复选框的listviewitem。经过进一步研究 blog post 把我指向正确的方向。下面是获取单击复选框的行的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());
            }
        }