У меня есть 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>
Это очень просто, просто обработайте событие Click на своем флажке:
private void CheckBox_Click(object sender, RoutedEventArgs e) {
var cb = sender as CheckBox;
var item = cb.DataContext;
myListView.SelectedItem = item;
}
Вам необходимо проанализировать свое визуальное дерево, чтобы получить индекс установленного флажка, и выбрать этот конкретный элемент списка в вашем коде всякий раз, когда установлен какой-либо флажок.
Вас также может заинтересовать
Как получить отметку элементы в WPF ListBox?
и
http://goalbook.wordpress.com/2009/09/05/wpf-checkedlist-control/
Вир предложил разобрать визуальное дерево, чтобы установить флажок. Дело в том, что флажок у меня уже был. Что мне было нужно, так это элемент 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());
}
}