【问题标题】:WPF ListView SelectedItem is nullWPF ListView SelectedItem 为空
【发布时间】:2011-02-06 04:22:42
【问题描述】:

我有一个列表视图,其中有一个复选框作为列之一。如果我单击实际复选框之外的任何位置,则 ListView 的 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>

【问题讨论】:

    标签: c# wpf listview checkbox selecteditem


    【解决方案1】:

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

    你可能也有兴趣

    How to get checked items in a WPF ListBox?

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

    【讨论】:

    • +1 .... 抱歉回复晚了。是的,必须解析可视化树,但不是按照您的链接建议的那样。尽管如此,感谢您的回复。看我的回答。
    【解决方案2】:

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

    private void CheckBox_Click(object sender, RoutedEventArgs e) {
        var cb = sender as CheckBox;
        var item = cb.DataContext;
        myListView.SelectedItem = item;
    }
    

    【讨论】:

    • +1 确实非常简单。我应该戴一副眼镜。我读了你的回答,我以为你误解了这个问题。是我误解了你的答案。很简单....谢谢:-)
    • 我一直在寻找几个小时,这正是我想找的东西!它完美地工作。太感谢了!确实如此简单。
    【解决方案3】:

    Veer 建议解析可视化树以获取复选框。事情是我已经有了复选框。我需要的是包含复选框的 listviewitem。经过进一步研究,blog post 为我指明了正确的方向。这是获取单击复选框的行的列表视图项的代码:

            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());
            }
        }
    

    【讨论】:

    • 尝试 @majocha 的回答了吗?
    猜你喜欢
    • 2011-01-18
    • 2023-04-06
    • 1970-01-01
    • 2013-10-09
    • 2018-07-07
    • 2023-03-25
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多