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