【问题标题】:Checkbox in listview - Checkbox click marks the listview line列表视图中的复选框 - 复选框单击标记列表视图行
【发布时间】:2015-07-18 16:47:03
【问题描述】:

我有一个列表视图,其中有一列是这样的:

<ListView.View>
   <GridView>
      <GridViewColumn x:Name="OnOffSwitch" Header="Enabled" Width="118">
          <GridViewColumn.CellTemplate>
              <DataTemplate>
                  <CheckBox Click="chkb_Click">
                      <CheckBox.Style>
                          <Style TargetType="CheckBox">
                              <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="true">
                                        <Setter Property="Cursor" Value="Hand" />
                                    </Trigger>
                              </Style.Triggers>
                           </Style>
                      </CheckBox.Style>
                  </CheckBox>
               </DataTemplate>
          </GridViewColumn.CellTemplate>
      </GridViewColumn>
   </GridView>
</ListView.View>

点击事件如下:

private void chkb_Click(object sender, RoutedEventArgs e)
    {
        startSomething = myList.SelectedItem;
    }

我的问题是当我在列表视图中没有“标记”行并按下复选框时没有任何反应,因为我没有选中项。或者,如果我有几行,请标记第 nr 1 行并尝试按下第 2 行上的复选框。它从错误的行开始,然后是我按下的行。

我能想到的最简单的解决方法是确保当我按下复选框时,我希望它标记我按下的复选框所在的行。但我这样做有问题。

有人可以帮忙吗?

【问题讨论】:

  • 所以如果我理解正确的话,你想在列表框中标记选中复选框项目的行吗?
  • 是的,这是正确的。我认为这是确保点击事件完美运行的最简单方法。
  • 为什么不使用绑定?
  • 显示的代码非常简化。我在很多事情上都使用绑定,但在这种情况下,由于一些配置文件等原因,这种方式更容易,所以如果有人 cud 帮助我找到如何标记 listview 行的解决方案,我将非常感激:)
  • 毕竟使用了某种绑定:P

标签: c# wpf listview checkbox


【解决方案1】:

将标签值添加到绑定到列表视图项的复选框

<CheckBox Click="chkb_Click" Tag="{Binding}">

并且您可以在单击处理程序中访问复选框所属的项目(无需选择之前的项目):

private void chkb_Click(object sender, RoutedEventArgs e)
{
    var startSomething = (sender as FrameworkElement).Tag;
}

【讨论】:

  • 谢谢 Fratyx,我马上试试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2016-04-25
  • 1970-01-01
  • 2016-05-19
相关资源
最近更新 更多