只需单击一下,即可在ListView中选中一个复选框

时间:2017-10-23 14:33:41

标签: wpf listview checkbox

在我的WPF计划中,我的ListView列中包含checkbox

    <ListView>
      <ListView.View>
        <GridView>
          <GridViewColumn Header="Checkbox-Column">            
            <GridViewColumn.CellTemplate>
              <DataTemplate>
                <Border BorderThickness="2" BorderBrush="AntiqueWhite">
                  <CheckBox IsChecked="{Binding Status}" />
                </Border>
              </DataTemplate>
            </GridViewColumn.CellTemplate>
          </GridViewColumn>
        </GridView>
      </ListView.View>
   </ListView>

当用户点击复选框时,它应立即更改状态。但实际上,用户需要两次点击。第一次单击选择行(或将其放入&#34;编辑模式&#34;,虽然我对此不确定),然后第二次单击更改复选框状态。

如何通过首次点击强制复选框更改?

编辑:此行为的原因是,我使用bool?而不是bool来绑定复选框。该属性的初始值为null(并且必须为),因此第一次点击会将值更改为false,将second更改为true(这就是为什么它似乎是控制对第一次点击没有反应 所以 - 问题应该是:如何强制控件从null更改为true而不是false

提前致谢,
弗兰克

2 个答案:

答案 0 :(得分:1)

  

如何强制控件从null更改为true而不是false

在视图中编写一些代码,在第一次将IsChecked属性设置为true时将false属性设置为private void CheckBox_Unchecked(object sender, RoutedEventArgs e) { var cb = e.Source as CheckBox; cb.IsChecked = true; cb.Unchecked -= CheckBox_Unchecked; } private void CheckBox_Checked(object sender, RoutedEventArgs e) { var cb = e.Source as CheckBox; cb.IsThreeState = false; }

<CheckBox IsChecked="{Binding Status}" IsThreeState="True"
          Checked="CheckBox_Checked"
          Unchecked="CheckBox_Unchecked"/>
~/.odbcinst.ini

答案 1 :(得分:0)

您必须将VerticalAlignment的{​​{1}}和HorizontalAlignment(以及可能的CheckBox)设置为Border

默认情况下,这在大多数控件上都已完成,但您可能会通过显式样式覆盖它,或者ListView默认会为其子项覆盖它(不确定它的行为)。