代码之家  ›  专栏  ›  技术社区  ›  RodH257

WPF工具包数据报-如何关闭选择?

  •  12
  • RodH257  · 技术社区  · 16 年前

    我在WPF中有一个数据报绑定到一个对象。

    我在那里有一个DataGridCheckBoxColumn,我希望用户能够浏览并勾选他们想要的。问题是他们必须单击两次,一次选择,然后再次选中/取消选中。你到底是怎么关掉它的,我一直在寻找找到答案的方法。数据报具有SelectionMode和SelectionUnit属性-两者都不接受“无”或“离开”

    感谢您的帮助!我的代码如下供参考

    <my:DataGrid Margin="15"  Name="dgPreview" 
            AutoGenerateColumns="False" CanUserSortColumns="True" 
                 CanUserDeleteRows="True" 
                 Background="White" 
                 ColumnHeaderHeight="20" 
                 VerticalScrollBarVisibility="Visible" 
                 RowDetailsVisibilityMode="Visible" 
                 >
    
        <my:DataGrid.Columns>
            <my:DataGridCheckBoxColumn  MinWidth="50" Width="Auto" Header="Include" Binding="{Binding Include}" />
            <my:DataGridTextColumn MinWidth="50"  Width="Auto" Header="Override #" Binding="{Binding OverrideNumber}" />
            <my:DataGridTextColumn MinWidth="220" Width="*" Header="Name" Binding="{Binding Name}" />
            <my:DataGridTextColumn MinWidth="50" Width="Auto" IsReadOnly="True"  Header="Preview" Binding="{Binding Preview}" />
        </my:DataGrid.Columns>
    </my:DataGrid>
    
    2 回复  |  直到 7 年前
        1
  •  19
  •   John Myczek    16 年前

    第一次单击将单元格置于编辑模式,第二次单击允许您修改复选框。可以使用DataGridTemplateColumn而不是DataGridCheckBoxColumn来更改此行为。将DataGridCheckBoxColumn替换为:

    <my:DataGridTemplateColumn MinWidth="50" Width="Auto" Header="Include" SortMemberPath="Include">
       <my:DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
             <CheckBox Style="{StaticResource DataGridCheckBoxStyle}" IsChecked="{Binding Path=Include}" />
          </DataTemplate>
       </my:DataGridTemplateColumn.CellTemplate>
    </my:DataGridTemplateColumn>
    

    DataGridCheckBoxStyle只会使复选框在DataGrid中看起来更好一点:

    <Style x:Key="DataGridCheckBoxStyle" TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
       <Setter Property="VerticalAlignment" Value="Center" />
       <Setter Property="Margin" Value="8,0,3,0" />
    </Style>
    
        2
  •  1
  •   Priidu Neemre aran    11 年前

    首先,我知道这是一个相当古老的问题,但我仍然认为我会尝试回答它。

    几天前,我也遇到了同样的问题,并意外地发现了一个很短的解决方案(见 this blog )基本上,你需要做的就是替换 DataGridCheckBoxColumn XAML中的定义包含以下内容:

    <DataGridTemplateColumn Header="MyCheckBoxColumnHeader">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsChecked="{Binding Path=MyViewModelProperty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    

    这个解决方案的好处是显而易见的——它只是XAML;因此它有效地避免了您用额外的UI逻辑重新加载代码,并帮助您在MVVM狂热者的眼中保持自己的状态;)。

    推荐文章