WPF ListView SelectedItem является пустым

У меня есть Listview, который имеет флажок как один из столбцов. Если я нажимаю где-нибудь, но фактический флажок SelectedItem ListView установлен на текущую выбранную строку, как ожидалось. Если, с другой стороны, я нажимаю на флажок (не нажимая на строку сначала) затем, 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>
12
задан Peter 1 March 2012 в 01:59
поделиться

3 ответа

Это очень просто, просто обработайте событие Click на своем флажке:

private void CheckBox_Click(object sender, RoutedEventArgs e) {
    var cb = sender as CheckBox;
    var item = cb.DataContext;
    myListView.SelectedItem = item;
}
16
ответ дан 2 December 2019 в 18:52
поделиться

Вам необходимо проанализировать свое визуальное дерево, чтобы получить индекс установленного флажка, и выбрать этот конкретный элемент списка в вашем коде всякий раз, когда установлен какой-либо флажок.

Вас также может заинтересовать

Как получить отметку элементы в WPF ListBox?

и

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

3
ответ дан 2 December 2019 в 18:52
поделиться

Вир предложил разобрать визуальное дерево, чтобы установить флажок. Дело в том, что флажок у меня уже был. Что мне было нужно, так это элемент listview, содержащий флажок. После дальнейшего исследования эта запись в блоге указала мне правильное направление. Вот код для получения элемента списка строки, в которой был установлен флажок:

        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());
        }
    }
0
ответ дан 2 December 2019 в 18:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: