我看到了一些关于此的事情,但我现在已经失去了它,再也找不到了。我需要知道当复选框被选中时(哪个最终会导致其删除),知道哪个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
答案 0 :(得分:0)
您可以使用VisualTreeHelper
走可视树,找到ListViewItem
。但是,如果可能的话,我建议不要采用这种方法。很可能使用其他WPF功能(如数据绑定)来实现您的目标。
答案 1 :(得分: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将无法匹配。所以想法?