質問

WPFにオブジェクトにバインドしているデータグリッドがあります。

DataGridCheckBoxColumnがあり、そこにユーザーが通過して必要なものにチェックを付けられるようにします。問題は、選択するために1回クリックし、次にチェック/チェック解除するためにもう一度クリックする必要があることです。いったいどのようにこれをオフにしますか、私はこれに対する答えを見つけるために長い道のりを探してきました。データグリッドには、SelectionModeプロパティとSelectionUnitプロパティがあります。どちらも 'none'または 'go away'を受け入れません

ご協力をお願いします!私のコードは参考のために以下にあります

<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回目のクリックでチェックボックスを変更できます。 DataGridCheckBoxColumnの代わりにDataGridTemplateColumnを使用して、この動作を変更できます。 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は、CheckGridを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>

他のヒント

まず、これはかなり古い質問であることを知っていますが、私はそれを試して答えたいと思っていました。

数日前に同じ問題を抱えていたが、驚くほど短い解決策に出くわした(このブログ)。基本的に、必要なことは、XAMLの DataGridCheckBoxColumn 定義を次のものに置き換えることだけです。

<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の熱狂者の目に自分のステータスを維持するのに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top