首页 文章

确定存在哪个ListViewItem复选框

提问于
浏览
0

我看到了一些关于此的事情,但我现在已经失去了它,再也找不到了 . 我需要的是知道哪个ListViewItem复选框存在,选中复选框(最终会导致删除),

我试过让父母,但显然这不起作用 .

XAML:

<ListView Name="incomingMessages" Extensions:ListViewColumns.Stretch="true"
  Height="226" Canvas.Left="0" Canvas.Top="0" Width="755" ItemsSource="{Binding Messages}">
  <ListView.View>
    <GridView>
      <GridViewColumn Header="Time" Width="100" DisplayMemberBinding="{Binding Time}" />
      <GridViewColumn Header="Message" DisplayMemberBinding="{Binding FullMessage}"  />
      <GridViewColumn Header="Phone Number" DisplayMemberBinding="{Binding Number}" Width="85"  />
      <GridViewColumn Header="Done" Width="45">
        <GridViewColumn.CellTemplate>
          <DataTemplate>
            <CheckBox IsChecked="{Binding Done}" VerticalAlignment="Center" />
          </DataTemplate>
        </GridViewColumn.CellTemplate>
      </GridViewColumn>
    </GridView>
  </ListView.View>
</ListView>

需要在Checked事件中使用哪种代码才能使其正常工作? (作为一个附带问题,为什么我的VerticalAlignment不在中心对齐列中的复选框?)

就像我说的那样,我在这种代码中尝试过父母

private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            CheckBox cb = (CheckBox)sender;
            object lv = cb.parent;
        }

如果我在cb.parent行上断点,则cb.parent为null .

谢谢,Psy

2 回答

  • 0

    好的,我所做的就是做到这一点

    <CheckBox IsChecked="{Binding Done}"
      Uid="{
        Binding Path=Items.Count,
        Mode=OneTime,
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}
      }"
      Checked="CheckBox_Checked"
      VerticalAlignment="Center"
      HorizontalAlignment="Center" />
    

    这是有效的(除了前三个添加,因为它们是在运行时添加,似乎绕过它,但是在实时版本中不会发生这样就可以 . 但是后来我可以看到这导致问题被删除时,因为Uid将被维护,但DataSource将无法匹配 . 所以想法?

  • 0

    您可以使用 VisualTreeHelper 向上走可视树并找到 ListViewItem . 但是,如果可能的话,我建议不要采用这种方法 . 很可能使用其他WPF功能(如数据绑定)来实现您的目标 .

相关问题